tyosyoshinsy

C# で SOAP Webサービスを使った
サーバーとクライアントアプリを作る

公開日:2021/3/31

今回は、VisualStudioのC#で、SOAP プロトコルを利用した、アプリ間で通信が出来るアプリを作ってみようと 思います。
SOAPプロトコルは主にブラウザ上で起動するWebサービスアプリ(asmx)が一般的ですが、フォームウィンドウ を持った独立した実行ファイル形式のアプリでも、サーバーを構築する事が出来ます。
なので、今回はC#で、アプリ形式のサーバーとクライアントを作り、どのような手順でアプリ間で通信を行うのか、 具体的なサンプルコード作って紹介しようと思います。

はじめに、Webサービスを行うサーバーアプリを作る

まず初めに、Webサービスを行う、サーバー側のアプリを作っていきます。 VisualStudio を起動して、プラットフォームを C# に選択して、新規プロジェクトを立ち上げます。
プロジェクト名はとりあえず、分かりやすいように SOAP_Server とします。

SOAPsmpl1

プロジェクトが出来たら、ソリューションエクスプローラーからプロジェクトを右クリックして、 メニューかた、『追加』⇒『新しい項目の追加』から、あらたにクラスを追加します。
追加するクラスの名前は、WSHost とします。

SOAPsmpl2

新たに作ったクラスを開いて、下記写真を参考に、WSHost クラスを記述してください。
!ポイント! この部分か今回のSOAPの核となるプログラムなので、少し量多いですが頑張って間違えないように書いてください。

SOAPsmpl3

※注意:このサンプルプログラム内の、ipEntry.AddreddList[0].ToString();
と記述されているコード部は、サーバーマシンとなるPCの全てのネットワークポートが配列となって格納されます。
使用したいネットワークポートが[0]とは限らないので、使用するIPアドレスが予め決まっているようでしたら、 strAddr に "192.168.1.***"; といった具合に直接書き込んでも良いです。


そのままだといくつかエラーでるので、参照設定の右クリックから、参照の追加 より Sytem.ServiceModel と System.Runtime.Serialization を追加しておきます。

 
スポンサードリンク
       
 
SOAPsmpl4

他のエラーは、まだ作ってないクラスの参照エラーなので、WSHost クラスを追加した手順と同じように、 『WSDataContract』『WSImplement』『WSDInterface』それぞれ追加しておきます。

SOAPsmpl5

WSDataContract の cs ファイルができたらファイルを開いて、上記写真を参考に WSDataContract クラスから クライアント側からアクセスする為のデータ型クラスを定義します。
このクラスが、クライアント側が扱えるデータ型となるので、仕事を増やしたい場合は、この WSDataContract.cs ファイルに定義を増やしていきます。

SOAPsmpl6

次に、WSDInterface.cs ファイルを開きます。ここが窓口となるインターフェース部になるので、先程定義した TestData クラスを 使用出来るように、ここに宣言します。

スポンサードリンク

SOAPsmpl7

最後に、WSImplement.cs ファイルを開いて、先程クラスとして定義した、TestDataクラスのインスタンスを返す、 実際に仕事をするプログラムをつくります。 この dataSend という関数が、クライアントが実際に呼び出す関数になります。

これで、SOPAを使った、基本的なWebサービス(Service References)の準備が整いましたので、最後の最後に、 フォーム上で、サービス参照先を表示出来るように、GUIの準備をします。
Form1.cs のデザインを表示させて、ウィンドウをデザインします。

SOAPsmpl8

デザインといっても、サービス先のURLを表示させる、テキストボックスと、サーバーを開始させる、 ボタンだけでいいので、コントロールを配置させます。
特に難しい事はしないのでコントロールのID名はそのままでも良いです。
配置ができたら、デザイン画面で、ボタンをダブルクリックして、ボタン用のイベントを追加します。

SOAPsmpl9

クリック後はそのままコードウィンドウに切り替わるので、上記写真を参考に赤枠で囲った部分を記述します。

これでサーバー側のプログラムの準備は全て完了です。リビルドをして実行ファイルを生成しましょう。
生成が出来たら、実行ファイルを管理者権限で起動させます。

SOAPsmpl10

起動出来たら、ボタンをクリックしてサーバーを開始させます。
正常に起動出来たら、テキストボックス内に、サービスURLが表示されるはずです。

サーバーの準備が出来たので、次はクライアント側のアプリを作っていきます。

スポンサードリンク

クライアント側となるアプリを作る

それでは、先ほどのWebサービスにアクセスする為の、クライアントアプリを作っていきます。
今度は、VisualStudio を管理者権限で起動してから、新しいプロジェクトを作っていきます。

SOAPsmpl11

サーバーの時と同じ要領で、新規プロジェクトを立ち上げます。 とりあえず、クライアント側は SOAP_Client という名前でプロジェクトを立ち上げます。

プロジェクトが立ち上がったら、クライアントアプリ側で、サーバーのWebサービスを利用できる 様に、ソリューションエクスプローラーから、参照設定 を選択し、サービス参照の追加から、 Webサービスを追加していきます。

SOAPsmpl12

サービス参照の追加 を選択すると、上記写真のウィンドウが現れるので、先程作ったサーバー アプリを立ち上げ、サーバーを開始させて、テキストボックスに現れたURLを、ウィンドウの アドレス(A): にコピーして、移動 をクリックします。

SOAPsmpl13

すると、先ほどサーバー側アプリで作った、インターフェースと関数が表示されるので、OK をクリックして追加させます。
Webサービスの追加はこれで完了です。
次は、サーバーの時と同じように、フォームウィンドウのデザイン画面に切り替えて、 通信の確認をする為の、GUI コントロールを配置してデザインを行います。

SOAPsmpl14

今回も、機能の確認の為にデザインは必要最低限にシンプルにさせます。
とりあえず、実行の為のボタンと、文字列が操作できるようにテキストボックスを適当に配置します。

デザインが出来たら、サーバーの時と同じように、デザイン上のボタンをダブルクリックして、 ボタンクリックイベント関数を自動で作らせます。

スポンサードリンク

SOAPsmpl15

コード編集画面に切り替わったら、上記写真を参考に、赤枠で囲ったプログラムを記述します。

コードの記述が出来らた、最後にソリューションエクスプローラーから、app.config ファイルを開いて、 XMLで記述されている、endpoint タグの URLが、サーバーのIPアドレスになっているか確認をします。
※この app.config ファイルは後でも変更可能です。

SOAPsmpl18

これで、全ての準備が整ったので、サーバーの時と同じくリビルドして実行ファイルを生成しましょう。
後は実際に、サーバーとクライアントアプリを、起動して動作確認をしてみましょう。

確認の為に、パソコンを二つ用意して、二つのパソコンをローカルネットワークとして繋げます。
二つのパソコンは、共に事前にファイヤーウォールを切っておいてください。(デフォルトの状態ではファイヤーウォールの妨害を受けて通信しません)
また、サーバー側のパソコンは、サーバー側のアプリのプログラムにIPアドレスを直接記述した場合は、使うポートを同じIPアドレスになるように設定して おく必要があります。

サーバーとクライアント共に、管理者権限で起動して、サーバー側の START ボタンをクリックしサービスを開始しておきます。

SOAPsmpl16

クライアントアプリ側の、テキストボックスに、適当に文字を入力して、button1 をクリックします。

SOAPsmpl17

無事に通信が出来たら、サーバー側で受け取った文字列が繋がって、戻ってきたのが確認出来ると思います。

これで、SOAP の Webサービス プロトコルを利用したプログラムの紹介は、以上となります。

正直、あまりポピュラーな手法ではなく、またアプリを管理者権限で起動しないと利用できない等、利便性において少し微妙ですが、 仕事、業務で利用しなければならなくなった時、本ページが少しでも参考になったら嬉しいです。

スポンサードリンク

chosyoshinsya 2015~2021 All Rights Reserved.

tyosyoshinsy