【Webサービス】【C#】Javaで作ったWebサービスに対して、C#のクライアントアプリを作成する

■ はじめに

 * 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 1
using 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;
        }
    }
}


関連記事

Webサービス / Metro [1] ~入門編 / サーバサイドの構築 ~

https://blogs.yahoo.co.jp/dk521123/36139336.html