WCFを開発を行うにあたり、今後を考慮してホストとロジックを分けるように指摘されました。
てっきり、WCFサービスアプリケーションプロジェクトにてWCFサービスを追加した場合、デフォルトで.svcと.svc.csで分けられているので、これでよいのかと思ったら、どうやらそうではなくて、プロジェクトを分けることでconfigファイルがメインで、あとは参照するだけのプロジェクト(ホスト)と、残りのロジック部分で構成されるプロジェクト(ロジック)の二つに分けるようにという内容と判明し、調査が必要となりました。
.svcとconfigはホストのプロジェクトに配置しなければならなそうで、残りはなんとかすれば別プロジェクトに配置できるのでは・・・と予想し、下記のような対応を取ることにしました。
- とりあえず、ホストにてWCFサービスを追加
- 作成されたファイルのうち、.svc以外を削除
- ロジックにてWCFサービスを追加
- ホストのWeb.Configのsystem.serviceModel-servicesタグで、追加されたserviceタグのnameとcontractをロジックの方の値に変更
- ホストの作成された.svcファイルのServiceをロジック側に変更
なお、ロジックのプロジェクトは通常のクラスライブラリとかのプロジェクトでも問題ないと思うのですが、デバッグの都合上WCFサービスライブラリプロジェクトにしています。(スタートアッププロジェクトにしてデバッグすると、WCFテストクライアントが起動してくれるので・・・)
http://cid-065dced8e05792ea.skydrive.live.com/embedrowdetail.aspx/istb16Blog/WcfServicePractice.zip
ちなみに、Clientの方は作ってないので基本的に動きません。
追記:Client部分も作成したバージョンにアップしたファイルを置き換えました。