チュートリアル : Windows フォームからの XML Web サービスの呼び出し
更新 : 2007 年 11 月
XML Web サービスは Visual Studio の機能であり、これにより HTTP、XML、XSD、SOAP、WSDL などの標準プロトコルを使用する疎結合環境でメッセージを交換するアプリケーションを開発できます。メッセージは、構造化して型指定することも、緩く定義することもできます。Web サービスの機能は標準のプロトコルに基づいているため、Web サービス アプリケーションは、さまざまな実装形態、プラットフォーム、およびデバイスと通信できます。詳細については、「マネージ コードを使用した Web サービス」を参照してください。
Web サービスを使用すると、Windows フォームの機能を拡張できます。Windows フォームと Web サービスを接続するには、Web サービス メソッドを呼び出すだけで済みます。メソッド呼び出しがサーバーで処理された後で、その結果が返されます。
Web サービス メソッドには、同期と非同期の 2 種類のメソッドがあります。同期 Web サービス メソッドを呼び出した場合、呼び出し元は、操作を続行する前に Web サービスの応答を待機します。非同期 Web サービス メソッドが呼び出された場合、Web サービスの応答を待機している間も呼び出し元のスレッドの使用を続行できます。これにより、既存のスレッドをクライアント アプリケーションで効率的に使用できます。同期および非同期の Web サービス メソッドの使用方法の詳細については、「マネージ コードを使用した Web サービスへのアクセス」を参照してください。
同期 Web サービス メソッド
同期 Web サービス メソッドの呼び出しでは、メソッドを呼び出し、サーバーで計算が実行されて値が返るのを待機した後で、Windows フォームの残りのコードが続行されます。
XML Web サービスを作成するには
Web サービス アプリケーションを作成します。詳細については、「マネージ コードを使用した Web サービスの作成」を参照してください。
ソリューション エクスプローラで .asmx ファイルを右クリックし、[コードの表示] をクリックします。
加算を実行する Web サービス メソッドを作成します。2 つの整数を受け取り、加算して合計値を返す Web サービス メソッドを次のコード例に示します。
<WebMethod()> Public Function WebAdd(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y End Function
[WebMethod] public int WebAdd(int x, int y) { return x + y; }
/** @attribute WebMethod() */ public int WebAdd(int x, int y) { return x + y; }
乗算を実行する別の Web サービス メソッドを作成します。2 つの整数を受け取り、乗算して積を返す Web サービス メソッドを次のコード例に示します。
<WebMethod()> Public Function WebMultiply(ByVal x As Integer, ByVal y As Integer) As Integer Return x * y End Function
[WebMethod] public int WebMultiply(int x, int y) { return x * y; }
/** @attribute WebMethod() */ public int WebMultiply(int x, int y) { return x * y; }
[ビルド] メニューの [ソリューションのビルド] をクリックします。このプロジェクトで作成した .asmx ファイルを表示して、Web サービスのより詳細な情報を得ることもできます。これで、Web サービスを Windows フォームから呼び出すことができるようになりました。
XML Web サービスを同期呼び出しするには
新しい Windows ベースのアプリケーションを作成します。詳細については、「方法 : Windows アプリケーション プロジェクトを作成する」を参照してください。
セキュリティに関するメモ : Web メソッドを呼び出すには、WebPermission クラスによって特権レベルが付与されている必要があります。部分的に信頼できるコンテキストで動作している場合、プロセスが例外をスローすることがあります。詳細については、「コード アクセス セキュリティの基礎」を参照してください。
ソリューション エクスプローラで、プロジェクトの [参照設定] ノードを右クリックし、[Web 参照の追加] をクリックします。
[Web 参照の追加] ダイアログ ボックスが開きます。
[アドレス] ボックスに次の Web サービスの URI を入力し、Enter キーを押します。
https://localhost/WebService1/Service1.asmx
これは、前の手順で作成した Web サービスの URI です。WebAdd Web メソッドと WebMultiply Web メソッドが [Web 参照の追加] ダイアログ ボックスの左ペインに表示されます。
[参照の追加] をクリックします。
ツールボックスから、3 つの TextBox コントロールと 2 つの Button コントロールを追加します。テキスト ボックスは数値の入力に使い、ボタンは計算と Web サービス メソッドの呼び出しに使います。
各コントロールのプロパティを次のように設定します。
コントロール
プロパティ
テキスト
TextBox1
Text
0
TextBox2
Text
0
TextBox3
Text
0
Button1
Text
Add
Button2
Text
Multiply
フォームを右クリックし、[コードの表示] をクリックします。
Web サービスのインスタンスをクラスのメンバとして作成します。前に作成した Web サービスのサーバーの名前を確認する必要があります。
' Replace localhost below with the name of the server where ' you created the Web service. Dim MathServiceClass As New localhost.Service1()
localhost.Service1 MathServiceClass = new localhost.Service1();
localhost.Service1 MathServiceClass = new localhost.Service1();
Button1 の Click イベントのイベント ハンドラを作成します。詳細については、「方法 : デザイナを使用してイベント ハンドラを作成する」を参照してください。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Create instances of the operands and result. Dim x, y, z As Integer ' Parse the contents of the text boxes into integers. x = Integer.Parse(TextBox1.Text) y = Integer.Parse(TextBox2.Text) ' Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y) TextBox3.Text = z.ToString End Sub
private void button1_Click(object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y); textBox3.Text = z.ToString(); }
(Visual C#) フォームのコンストラクタに次のコードを挿入してイベント ハンドラを登録します。
this.button1.Click += new System.EventHandler(this.button1_Click); private void button1_Click (Object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = Integer.parseInt(textBox1.get_Text()); y = Integer.parseInt(textBox2.get_Text()); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y); textBox3.set_Text(""+z); }
Button2 の Click イベントのイベント ハンドラを同じように作成し、次のコードを追加します。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Create instances of the operands and result. Dim x, y, z As Integer ' Parse the contents of the text boxes into integers. x = Integer.Parse(TextBox1.Text) y = Integer.Parse(TextBox2.Text) ' Call the WebMultiply Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y) TextBox3.Text = z.ToString End Sub
private void button2_Click(object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y); textBox3.Text = z.ToString(); }
(Visual C#) フォームのコンストラクタに次のコードを挿入してイベント ハンドラを登録します。
this.button2.Click += new System.EventHandler(this.button2_Click); private void button2_Click (Object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = Integer.parseInt(textBox1.get_Text()); y = Integer.parseInt(textBox2.get_Text()); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y); textBox3.set_Text(""+z); }
F5 キーを押して、アプリケーションを実行します。
最初の 2 つのテキスト ボックスに値を入力します。[Add] ボタンをクリックすると、3 つ目のテキスト ボックスにそれらの合計が表示されます。[Multiply] ボタンをクリックすると、3 つ目のテキスト ボックスにそれらの積が表示されます。
メモ : Web サービスへの最初の呼び出しでは、Web サービスがサーバーでインスタンス化されるため、サーバーでの処理に多少時間がかかります。アプリケーションでボタンをクリックするときは、この点に注意してください。この時間差については、次のセクションで取り上げます。
次の手順
非同期 Web サービス メソッドを呼び出した場合、アプリケーションは Web サービスの応答を待機している間も実行を継続します。これにより、クライアント アプリケーションでリソースを効率的に使用できます。
詳細については、「方法 : マネージ コードを使用して Web サービスに非同期にアクセスする」を参照してください。
参照
処理手順
方法 : Windows フォーム BindingSource を使用して Web サービスにバインドする