■ はじめに
* Javaで作ったWebサービスを作成する予定だが、クライアントもJavaで作るより、 .NETで作った方が色々な面で楽なので、その方法を調べてみた。 => 思ったより簡単にできた。
使用するWebサービス
https://blogs.yahoo.co.jp/dk521123/36139336.html■ C#のクライアントアプリを作成する
[1] コマンドプロンプトを「管理者として実行」する [2] 「wsdl.exe」の場所まで移動する ~~~~~ cd C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools ~~~~~ [3] Web サービス記述言語ツール (wsdl.exe)を使って、C#のクライアントアプリを作成する ~~~~~ wsdl.exe /protocol:SOAP /namespace:Com.Sample.WebService /language:cs /out:SampleWebService.cs http://localhost:8080/SampleWebService/services/SampleWebService.ws?wsdl ~~~~~ => 「SampleWebService.cs」が生成される(以下のサンプル「SampleWebService.cs」を参照)
■ 開発環境
Webサービス側
* 以下の関連記事を参照のことhttps://blogs.yahoo.co.jp/dk521123/36139336.html
クライアント側
* Windows10 * Visual Studio 2017
■ サンプル
* 「System.Web.Services」を追加参照する必要がある
SampleWebService.cs
自動生成されたコード//------------------------------------------------------------------------------ // <auto-generated> // このコードはツールによって生成されました。 // ランタイム バージョン:4.0.30319.42000 // // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 // コードが再生成されるときに損失したりします。 // </auto-generated> //------------------------------------------------------------------------------ // // このソース コードは wsdl によって自動生成されました。Version=4.6.1055.0 です。 // namespace Com.Sample.WebService { using System; using System.Web.Services; using System.Diagnostics; using System.Web.Services.Protocols; using System.Xml.Serialization; using System.ComponentModel; /// <remarks/> [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="SampleWebServicePortBinding", Namespace="http://webservice.sample.com/")] public partial class SampleWebServiceService : System.Web.Services.Protocols.SoapHttpClientProtocol { private System.Threading.SendOrPostCallback sayYourAgeOperationCompleted; /// <remarks/> public SampleWebServiceService() { this.Url = "http://localhost:8080/SampleWebService/services/SampleWebService.ws"; } /// <remarks/> public event sayYourAgeCompletedEventHandler sayYourAgeCompleted; /// <remarks/> [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://webservice.sample.com/", ResponseNamespace="http://webservice.sample.com/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [return: System.Xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] public string sayYourAge([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string name, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] long age) { object[] results = this.Invoke("sayYourAge", new object[] { name, age}); return ((string)(results[0])); } /// <remarks/> public System.IAsyncResult BeginsayYourAge(string name, long age, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("sayYourAge", new object[] { name, age}, callback, asyncState); } /// <remarks/> public string EndsayYourAge(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((string)(results[0])); } /// <remarks/> public void sayYourAgeAsync(string name, long age) { this.sayYourAgeAsync(name, age, null); } /// <remarks/> public void sayYourAgeAsync(string name, long age, object userState) { if ((this.sayYourAgeOperationCompleted == null)) { this.sayYourAgeOperationCompleted = new System.Threading.SendOrPostCallback(this.OnsayYourAgeOperationCompleted); } this.InvokeAsync("sayYourAge", new object[] { name, age}, this.sayYourAgeOperationCompleted, userState); } private void OnsayYourAgeOperationCompleted(object arg) { if ((this.sayYourAgeCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.sayYourAgeCompleted(this, new sayYourAgeCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// <remarks/> public new void CancelAsync(object userState) { base.CancelAsync(userState); } } /// <remarks/> [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] public delegate void sayYourAgeCompletedEventHandler(object sender, sayYourAgeCompletedEventArgs e); /// <remarks/> [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class sayYourAgeCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal sayYourAgeCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// <remarks/> public string Result { get { this.RaiseExceptionIfNecessary(); return ((string)(this.results[0])); } } } }
WindowsFormsApp1.cs
TextBox x 2, Label x 1, Button x 1using Com.Sample.WebService; using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SampleWebServiceService webService = new SampleWebServiceService(); string result = webService.sayYourAge(this.textBox1.Text, Convert.ToInt64(this.textBox2.Text)); this.label1.Text = result; } } }
参考文献
http://a4dosanddos.hatenablog.com/entry/2013/11/28/003113http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20030319/1/
http://qiita.com/triple4649/items/bfc20cbd36f017dbb2d2