Uncategorized

Visual Studio 2008 で楽になった WCF サービスのデバッグ

環境:
Visual Studio 2008

こんにちは。

Visual Studio 2008 では、WCF サービスのデバッグが非常に楽になっています。
WCF サービスでは、サービスライブラリを作成し (dll の作成)、ホストプログラムを作成し (exe の作成。もしくは、IIS/WAS にホスト)、ホスト側で .config を作成してはじめて起動の準備が整います。このホストされた WCF をデバッグするというのは、これと接続するクライアントの構築まで考えると、プロセスのアタッチなどなど、さらに方法の検討が必要になってくることでしょう。(http://msdn2.microsoft.com/ja-jp/library/bb157685.aspx)
Visual Studio 2008 では、この点にも改善が加えられています。

Visual Studio 2008 (RTM版) で単に WCF サービスライブラリ(dll のみ)を作成して、F5 を押してみてください。Beta 版の頃は最終的な姿が理解できないほど未完成でしたが、RTM 版ではその便利な仕組みを実感することができます。

Visual Studio 2008 (.NET Framework 3.5) では、デバッグをおこなうと、サービスライブラリの App.config に基づいて WcfSvcHost.exe というサービスホストのプログラムが自動で起動するようになっています。(ですので、今後は、サービスライブラリ側の .config も、消さずにデバッグ用に残しておきましょう。)

さらに、このサービスと接続するクライアントも自動生成されています。上記の画面は、このクライアントアプリケーションそのものが表示されています。F5 によるデバッグと共に、このサービスと接続する専用の dll と config がユーザフォルダの「ドキュメント」の下に作成され、これが WcfTestClient.exe という組み込みのクライアントによりロードされ、自動実行されています。

このデバッグですが、サービスがワークフローサービスホスト (Workflow Enabled Service) の場合、ホストを WorkflowServiceHost に変更する必要があるため使えないように思われますが、ワークフローサービスホストでも同様に動作します。
特にワークフローサービスホストや、あるいは単純なWCFサービスであってもセッションごとのサービスや、.NET Framework 3.5 の新機能である Durable のサービスを構築した場合には、コンテキスト (Context) を保持して連続した動作が必要となるかもしれません。こうした場合には、以下の手順で、上記のウィンドウを持つ WcfTestClient.exe ではなく独自にデバッグ用のクライアントを作成して上記の仕組みで動作させることも可能です。

  1. コンソールアプリケーション、Windows フォーム(または WPF) アプリケーション、など、デバッグ用の簡易なクライントを作成してください。
  2. WCF サービスのプロジェクトで、プロジェクトのプロパティ画面を表示し、[デバッグ] タブを表示し、[コマンドライン引数] に

    /client:”<作成した exe のフルパス>”

    と入力します。

  3. F5 でデバッグ実行します

例えば、独自のコンソールアプリケーションをクライアントとした場合には、コンソールがそのまま表示されてきます。

その他詳細については、以下に記載されています。

http://msdn2.microsoft.com/ja-jp/library/bb552363.aspx

 

2008/01/21 に「Visual Studio 2008 Ready Day」という Visual Studio 2008 のイベントが開催されます。
かゆいところに手の届く .NET Framework 3.5 の完成された世界を是非実感してください。

http://www.microsoft.com/japan/msdn/events/vs2008/

 

Categories: Uncategorized

Tagged as:

2 replies»

  1. 当機能ですが、Windows Vista で動作させる場合には、UAC の関係でサービス (サーバ) の起動がブロックされますので、以下の通り権限を付与してください。
    netsh http add urlacl url=http://+:8080/Service1 user=exampledemouser
    (上記で url はデバッグで使用するサービスのアドレス、user はデバッグするユーザを指定します)
    「大人しい独り言」の中原 (http://blogs.msdn.com/mikion/) よりフィードバックがありました。(中原さん、ありがとうございます !)

    Like

Leave a Reply