2011年4月28日木曜日

IIS による Workflow サービス公開

WF4 を利用して外部にサービスとして公開する方法としては何通りかありますが、その中でも比較的簡単にサービス公開する方法である、IIS を利用した方法です。IIS を利用してワークフローをサービス公開するには大きく分けて二つの作業が必要になります。

  • ワークフローサービスとして公開するワークフローの作成
  • IIS の設定

ワークフローサービスとしてのワークフローですが、実際には今まで利用しているワークフローと殆ど違いがありません。IIS でホスティングを行う場合があるので、拡張子が xaml ではなく xamlx を利用しているだけで、内部に記述されている内容には殆ど違いがありません。唯一の違いはルートレベルに利用するアクティビティを WorkflowService アクティビティにするだけです。

service0

WorkflowService アクティビティにはプロパティが 3 つ公開されています。この部分でサービス名や config ファイル上の設定などを指定します。今回はサンプルという事で CodeRecipe で公開されているサンプルに近いものを作成します。サービスの処理内容としては、「適当な文字列を受け取って、適当に編集して、適当に返却する」というサンプルでしかありえない簡易な物とします。

サービスとして公開している場合、リクエストを受けるクチと返事を返すクチが必要となります。受け口は Receive アクティビティ、返却口は SendReply アクティビティとなります。これらは個別にデザイナ上にドロップしても構いませんが、大体は面倒なので 1 セットになっている ReceiveAndSendReply アクティビティを利用する事が多いと思います。また必要となる一部の設定を自動で行ってくれますので、できるだけ利用するのが楽だと思います。

service1

Receive アクティビティでは多くのプロパティが公開されているので少々戸惑いますが、今回のように簡易なサービスを利用する場合にはそれほど設定箇所はありません。

  • OperationName プロパティ:サービスのメソッド名
  • CanCreateInstance プロパティ:リクエスト受信時に新規インスタンスを生成するか
  • Content プロパティ:リクエストで受け付ける引数の設定

OperationName にメソッド名を定義し、CanCreateInstance にはチェックをつけておきます。そしてメソッドの引数を定義するために CorrelatesOn プロパティを設定します。プロパティダイアログにボタンが表示されているのでそれをクリックすると、コンテントエディタが表示されます。

service1-2

このエディタで受け取るリクエストの引数を設定します。メッセージとして設定する場合は単一の値、または WCF で利用される DataContract 属性を付けたクラスを指定します。

そして適当な処理の後では何かしらの値を返却するケースがあります。その場合に SendReply アクティビティを利用します。

service2

Receive アクティビティとプロパティは内容が近いです。こちらで必要なのは返却する内容を Content コレクションプロパティで設定します。

service2-2

今回は適当に編集した値を一つだけ返却しますのでこのように設定します。なおここでは変数を利用していますので、ワークフローの変数としても定義は行っています。

これでサービスとして提供するワークフロー自体は完成です。xamlx として保存します。もう一つ必要なファイルが IIS 上で動作する際の設定ファイルとなる web.config ですが、今回は WCF における既定の構成を利用しますので、以下の内容をそのまま利用します。

1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3:   <system.web>
4:     <compilation debug="true" targetFramework="4.0" />
5:   </system.web>
6:   <system.serviceModel>
7:     <behaviors>
8:       <serviceBehaviors>
9:         <behavior>
10:           <serviceMetadata httpGetEnabled="true"/>
11:           <serviceDebug includeExceptionDetailInFaults="false"/>
12:         </behavior>
13:       </serviceBehaviors>
14:     </behaviors>
15:   </system.serviceModel>
16:   <system.webServer>
17:     <modules runAllManagedModulesForAllRequests="true"/>
18:   </system.webServer>
19: </configuration>

この 2 つのファイルを IIS 上に用意した仮想フォルダにコピーするだけでワークフローサービスとしては動作します。動作しない場合、ファイアウォールで通信を許可しているか、IIS で利用するアプリケーションプールの設定が .NET4 用になっているか、等を確認してみてください。

今回は動作確認に、WCF テストクライアントを利用しました。

service3

このように通常と殆ど変りのないワークフローな xamlx ファイルを IIS に配置しただけでサービスとして利用できているのがわかると思います。外部公開するサービス、と言われると難しいイメージを覚えられることもあると思いますが、WF4 を利用した場合のサービス公開はこのように非常に簡単なものとなっています。

0 件のコメント:

コメントを投稿