■ サンプル
前提条件
サービスの実装(C#)* 「System.ServiceModel」を参照追加しておくこと * サービス側は「管理者として実行」で実行されていること => Visual Studio で実行するなら、Visual Studioを「管理者として実行」で実行する
サービスの実装(C#)
* プロジェクト「SampleForm」Form1.cs
using System; using System.ServiceModel; using System.Windows.Forms; using System.Diagnostics; namespace SampleForm { public partial class Form1 : Form { private ServiceHost host; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { try { this.host = new ServiceHost(typeof(SampleWcfService)); this.host.Open(); this.label1.Text = "Start WCF service"; } catch (Exception ex) { this.label1.Text = ex.Message; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (this.host != null) { this.host.Close(); } } } [ServiceContract] public interface ISampleWcfService { [OperationContract] int Plus(int value1, int value2); } public class SampleWcfService : ISampleWcfService { public int Plus(int value1, int value2) { Trace.WriteLine("Called me?"); return value1 + value2; } } }App.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- ★ 追加・ここから ★ --> <system.serviceModel> <services> <!-- 注意: サービス名は、サービスの実装の構成名と一致しなければなりません。 --> <service name="SampleForm.SampleWcfService" behaviorConfiguration="SampleWcfServiceBehaviors" > <!-- 次のエンドポイントを追加してください。 --> <!-- 注意: サービスには、このエンドポイントに追加する HTTP ベース アドレスがなければなりません。 --> <endpoint contract="SampleForm.ISampleWcfService" name="DemoWcfService" binding="basicHttpBinding" address="Plus" /> <host> <baseAddresses> <add baseAddress="">http://localhost:8888/SampleWcfService"/> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="SampleWcfServiceBehaviors" > <!-- 次の要素をサービス動作構成に追加してください。 --> <serviceMetadata httpGetEnabled="true" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <!-- ★ 追加・ここまで ★ --> </configuration>補足
【1】 endpointタグのname属性は、Javaクライアントコードのメソッド名に反映されるので 指定しておいた方がいい ~~~~~~ ■ App.config <endpoint contract="SampleForm.ISampleWcfService" name="DemoWcfService" ... ■ Javaコード ISampleWcfService proxy = service.getDemoWcfService(); // ★getDemoWcfService★ ~~~~~~ 【2】「binding="basicHttpBinding"」について * 「binding="mexHttpBinding"」だと、Javaでの接続でうまいこといかなかった
クライアントの実装(Java)
* 以下のサイトでEclipseでGUIからJavaコードを生成しているが、 ここでは、wsimportコマンドを使ってコードを自動生成する方法を取り上げるhttps://social.msdn.microsoft.com/Forums/en-US/f187404c-ba01-4832-a03e-f50ffadb8d26/c-wcf-service-and-java-client?forum=wcf
Javaクライアント作成手順
[1] ブラウザに「http://localhost:8888/SampleWcfService」にアクセス => 「svcutil.exe http://localhost:8888/SampleWcfService?wsdl」を確認 [2] コマンドプロンプトを立ち上げ、wsimportコマンド(※)を使い、 Javaクライアント側のコードを自動生成する ~~~~~ wsimport -keep -p com.sample.wcf.client http://localhost:8888/SampleWcfService?wsdl ~~~~~ => 「./com/sample/wcf/client」配下に以下のJavaコード群を確認する + ISampleWcfService.java + ObjectFactory.java + package-info.java + Plus.java + package-info.java + PlusResponse.java + SampleWcfService.java [3] [2]のJavaコードを組みこみ、さらに呼び出し側のコードを作成(以下のサンプルを参照) ※ wsimportコマンドの詳細については、以下の関連記事を参照のこと。https://blogs.yahoo.co.jp/dk521123/36130626.html
サンプル
import com.sample.wcf.client.ISampleWcfService; import com.sample.wcf.client.SampleWcfService; public class Main { public static void main(String[] args) { SampleWcfService service = new SampleWcfService(); ISampleWcfService proxy = service.getDemoWcfService(); Integer result = proxy.plus(12, 24); System.out.println("Result : " + result); } }実行結果 (「サービスの実装(C#)」を立ち上げておくこと)
Result : 36
参考文献
公式サイト
https://docs.microsoft.com/ja-jp/dotnet/framework/wcf/feature-details/how-to-publish-metadata-for-a-service-using-codehttps://social.msdn.microsoft.com/Forums/en-US/f187404c-ba01-4832-a03e-f50ffadb8d26/c-wcf-service-and-java-client?forum=wcf
関連記事
WCF
WCF ~ 基礎知識編 ~https://blogs.yahoo.co.jp/dk521123/22254537.html
WCF ~ Hello World編 ~
https://blogs.yahoo.co.jp/dk521123/31872515.html
WCF ~ App.configを付加 ~
https://blogs.yahoo.co.jp/dk521123/31874697.html
WCF に Javaでアクセスした際のトラブルシューティング
https://blogs.yahoo.co.jp/dk521123/37972170.html
Java
Webサービス / Metro [2] ~入門編 / クライアントサイドの構築 ~https://blogs.yahoo.co.jp/dk521123/36140561.html
wsimportコマンドによる Web サービス・クライアントの作成
https://blogs.yahoo.co.jp/dk521123/36130626.html