特集
|
WSEとWS-Routing
WSEでWS-Routingを実装するということは、すなわちWS-Routing仕様をサポートする「ルータ」を実装することにほかならない。このルータは、渡されたSOAPメッセージをさまざまな条件に応じてほかの中継者、あるいは最終的な受信者に転送する。
例えば、受け取ったメッセージをすべてログに記録し、次の中継者へ転送するルータが考えられる。ファイアウォールのように、特定のあて先が指定されたSOAPメッセージだけを内部ネットワークに転送し、残りは拒否するようなルータもあり得る。あるいは論理的なあて先URIに対して負荷を考慮しながら実際の転送先を振り分けるロード・バランサのようなルータも考えられるだろう。WSEには「NO-OPルータ」、つまり何もせずに次の転送先へメッセージを転送するルータが付属している。
■WSEのルータを利用するXML Webサービス作成
WSEで提供されているルータを利用するには、次の手順でASP.NETのXML Webサービスを作成すればよい。からまでの手順は、本連載Part1でWS-Securityの実装を行ったときと同じで、WSEの機能が使えるようにするための準備だ。
Visual Studio .NET(以下VS.NET)で「ASP.NET Webサービスプロジェクト」を新しく作成する。ここでは名前を「WSERouting」とした。
VS.NETの「参照の追加」機能でMicrosoft.Web.Services.dllへ参照を追加する。
プロジェクト内のWeb.configファイルを編集して、system.web要素の子要素になるように次の要素を記述して、XML Webサービスの実行時にSoapExtensionが起動されるようにする。
|
|
Web.configファイルでのSoapExtensionの設定 | |
XML Webサービスの実行時にSoapExtensionが起動されるようにする。 |
同じくWeb.configファイルを編集して、system.web要素の子要素になるように次の要素を記述して、「.ashx」という拡張子を持つURLへの要求に対して、Microsoft.Web.Services.Routing.RoutingHandlerクラスで対応するようにHTTPハンドラをHTTPパイプラインに挿入する。
|
|
Web.configファイルでのHTTPハンドラの設定 | |
「.ashx」という拡張子を持つURLへの要求に対して、RoutingHandlerクラスが対応できるようにする。 |
Service1.asmx.csファイルに次のようなWebMethodを記述する。
|
|
Webサービスとなるメソッドの追加 |
■XML Webサービスのクライアント作成
これでサーバ側の実装ができたので、今度はクライアント側を実装してみよう。ここでもからまでの手順はPart1のときと同じだ。
コンソール・アプリケーションのプロジェクトを作成する。ここでは名前を「WSERoutingClient」とした。
プロジェクトにMicrosoft.Web.Services.dllへの参照を追加する。
上記手順で作成したWebサービスに対してWeb参照の追加を行う。
http://localhost/WSERouting/Service1.asmx?wsdl
というURLでWebサービスのWSDLが取得できるはずだ。
作成されたプロキシ・クラスのソース・コードを変更する。プロキシ・クラスのソース・コードは、Reference.csという名前で[Web References]の中の[localhost]の下にある。表示されない場合は、VS.NETのソリューション・エクスプローラで[すべてのファイルを表示]ボタンをクリックする。
変更内容は、プロキシ・クラス「WSERoutingClient.localhost.Service1」の基底クラスを、
System.Web.Services.Protocols.SoapHttpClientProtocol
から、
Microsoft.Web.Services.WebServicesClientProtocol
にすることだけだ。
|
|
自動生成されたプロキシ・クラスの基底クラスの修正 |
Mainメソッドを実装する。
このメソッドの中でルーティングの経路を設定する。具体的には、上記の手順で基底クラスを変更することによって得られるSoapContextクラスを取得し、そのPathプロパティに経路を設定していく。ここでは、次のような経路を設定する。
送信者(コンソール・アプリケーション) |
→ http://localhost/WSERouting/a.ashx(中継者) |
→ http://localhost/WSERouting/b.ashx(中継者) |
→ http://localhost/WSERouting/c.ashx(中継者) |
→ http://localhost/WSERouting/Service1.asmx(最終的な受信者) |
|
|
Mainメソッドでの経路の設定 | |
SoapContextオブジェクトのPathプロパティで、経由する中継者を追加する。ViaCollectionはrev要素を追加するためのもの。 |
なお、a.ashx、b.ashx、c.ashxの3つについては、ファイルとして存在している必要はない。サーバ側の作成手順のところで設定したとおり、.ashxという拡張子に対するアクセスは、RoutingHandlerクラスを代わりに立ち上げて処理するように構成してあるため、これらに対するURLへのアクセスはすべてRoutingHandlerに渡されるからだ。
INDEX | ||
[特集]次世代XML Webサービスを試す Part 3 | ||
SOAPメッセージのルーティング | ||
1.SOAPメッセージのルーティングを規定するWS-Routing | ||
2.WSEでのWS-Routing利用 | ||
3.WS-RoutingのSOAPメッセージ | ||
4.WSEによるルータの実装 | ||
5.WS-Referralを利用したルーティング(1) | ||
6.WS-Referralを利用したルーティング(2) | ||
「特集:次世代XML Webサービスを試す」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|