2012年2月22日水曜日

WCFサービスを作成する

WCFサービスの作成から動作確認までの手順。ものすごい手間取った・・・
※ASP.NETサイト上で作成することを想定しています。

0.サービスの違い
サービスをつくろうかな、と思うとなんだか同じような名前でいろいろ選択肢があって迷う。
①Webサービス
②WCFサービス
③WCFデータサービス

Webサービスは一般的なSOAP形式のサービスを作成できる。単体で作成、テストが出来るので使いやすい。

WCFサービスは位置づけとしてWebサービスをさらに発展させたものであり、こちらを使った方がいいとマイクロソフトは言っているように思える。ただ、クライアントとサービスでプロジェクトを分けることが前提に作られているようで、気軽に今のWebサイト内に追加、という感じでは使いにくい。

WCFデータサービスは、エンティティデータモデルを外部公開(OData形式)するということを意識して作られているようだ。そのため、WCFサービスより柔軟性は低いが、既にエンティティデータモデルを使用しているならすばやいデータ公開が可能と思う。


1.WCFサービスの作成
新しい項目の追加 > WCFサービスで追加を行う。
こうすると、以下3種類のファイルが作成される
  >AppCode内
①I<入力したサービス名> : サービスの定義が記載されている(ServiceContract)
②<入力したサービス名>  : サービスの実装クラス

  >ルートフォルダ内(右クリックしたフォルダ内)
③<入力したサービス名>.svc : サービスのアクセスポイントとなるファイル

実態としては、③→①→②の順に処理が解決されていくイメージとなる

2.各種設定
①サービスコントラクト
外部からアクセスする処理(つまりメソッド)を定義するが、この際設定すべきアトリビュートがいくつかある。
必須:<OperationContract()>
            サービス用のメソッドであることの宣言?
任意:<WebGet()>/<WebInvoke()>
GETで使用する場合WebGet、POSTで使用する場合WebInvokeを指定する。クライアントの呼び出しとサーバー上の設定が合っていないと405 Method Not Allowedが発生することがある。
JSON以外を使用する場合は、RequestFormat/ResponseFormatで形式を設定すること。


②サービス実装
サービスの実装。ASP.NETでも稼動させる場合?クラスにAspNetCompatibilityRequirementsの指定が必要。


③web.config
system.serviceModelの部分がWCFサービスのホスティングに関わる箇所になる。
services、behaviorsはデフォルトで追加されるし内容もそれほど分かりにくくないが、注意すべきはbehaviorsの中のendpointBehaviorsだ。これを設定しないとクライアントから呼び出せない。
serviceにはbehaviors/serviceBehaviorsが対応し、
serviceのendpointにはendpointBehaviorsが対応する。
endpointBehaviorsのbehaviorにenableWebScriptかwebHttpを設定しておくことでクライアントから呼び出すことができるようになる。

endpointBehaviorsとwebHttpはどちらを設定しても一見同じに見えるが、endpointBehaviorsの場合受け取ったオブジェクト.d(例:msg.d)の中にデータが格納されるという違いがある(webHttpはそのまんま)。


3.テスト・呼び出し
サービス側のテストは、デバッガを起動すると「指定された値は無効なコントロール文字を含んでいます。」というエラーが出てどうにもうまくいかない。
ただ、幸いにしてサービスの実装は単なるクラスなので、これをコードビハインドでテストしたほうがよっぽど早い。

クライアント側は、AJAX呼び出しを行い動作の確認を行う上記の設定を行えばJQueryの$.ajaxから呼び出せるはずなので、それで動作を確認すればよい。


4.参考サイト
WCFサービスの作成方法
10 行でズバリ !! サービスの作成 (WCF) 
RESTでJSONなサービスをWCFで作ったり使ったりする

JQueryからの呼び出し
jQueryを使ってWCFのサービスにアクセス

0 件のコメント:

コメントを投稿