2009-08-04 22 views
15

私はWCFサービスを設計しています。私はWCFに慣れていないので、IISでカスタムのWindowsサービスをホストする必要があるかどうかを判断しようとしています。IISでWCFサービスをホストする必要がありますか?

の考慮事項:

  • これは、起動時にデータベースからデータをロードする必要があります。
  • このデータを要求ごとに保持し、毎回ロードする必要はありません。
  • 複数の要求を同時に処理する必要があります。
  • エンドポイントに関しては、できるだけ設定を変更する必要があります。
  • これはネイティブdllをかなり呼び出すことになります。

私はそれをIISでホストしていると思っていますが、特定のことを単純化すると思いますが、この状況では良いアイデアではありません。

私の選択肢は何ですか?その賛否両論は何ですか?

答えて

16

あなたは基本的に3つのオプションを見てする必要があります:

1)IIS6(のWindows Server 2003/2003 R2)でホスティング:このシナリオでは、あなただけのHTTPプロトコルをホストすることはできません - 何も。これはかなり制限されています。イントラネットシナリオ用のnetTcp。

2)IIS7/WAS(Vista、Server 2008)でのホスティング:これにより、サポートされているプロトコルの選択肢が増え、ホスティング環境は最初は勝者のように見えます。

3)セルフホスティング:このシナリオでは、サービスをホストして実行するために必要な作業は、すべてあなた次第です。

オプション1を今すぐ外した場合(IIS6しか利用できない場合、私はいつも自己ホスティングを使用しています)、IIS7と自己ホスティングの違いです。

IIS7は、「オンデマンドでのオンデマンド」を提供します。サービスコードは常にメモリに格納されていませんが、要求が到着するとロードされインスタンス化されます。これはプラスの可能性があります。

一方、IIS7/WASでホストすると、独自のエンドポイントを指定することができなくなります。エンドポイントとサービスアドレスは、MyService.svcファイルが存在する仮想ディレクトリです。どのような形でも、形や形を変えることはできません。

セルフホスティングは多くの仕事のように見えるかもしれませんが、あなたには最高の柔軟性があります。好きなようにプロトコルを選ぶことができます。自分の好きなように独自のアドレッシングスキームを設定できます。いつ何が行われるかを完全に制御します。サービスをホストするために余分な作業をする必要がある場合など、独自のカスタムServiceHostを導入することができます。

WCFをちょっと遊んでいない限り、私は常にWCFサービスをWindows NTサービス内で実行する必要がある場合は自己ホスティングに投票して投票することをお勧めします。プロダクション環境の場合)、開発/デバッグの場合は、コンソールアプリケーションでWCFサービスを完全にホストすることができます。これを起動して休憩することができます。

長いストーリーを短くするために、結局のところ、何が起こっているのかを本当にコントロールしたいのであれば、私はいつもセルフホスティングをお勧めします。 .NET 4は、おそらく初期の2010年には、起動された後、いつか - -

マイクロソフト社の新しい「ダブリン」サーバー・アドオン一度このかもしれないの変化が出てきますが、それはまだ言うには時期尚早です。

これが役に立ちます。

マルク・

+3

あなたは本当にあなたのWCFを知っています。 – Contango

+0

@Gravitas:ありがとう!私はWCFマスターから学んだ:-)(Juval Lowy) –

+0

こんにちは、ほぼ5年後、WCFとIISの最新バージョンであなたの答えを更新できましたか?また、Windowsサービスのリサイクル機能はIISほど効率的ではないと思いますか?ありがとう! – Nock

3

IIS7とWASがなければ、IISを使用するHTTPベースのエンドポイント以外はホストできません。そのため、あなたは自発的にフレキシブルにホストしたいと思うでしょう。

あなたのデータの考慮事項については、いずれかのサービスが

複数の要求は、WCFの同時実行を使用するために、あなたが必要になりますなどのデータがキャッシュされているような状態でコード化することができます。あなたは、あなたのサービスのホスト上の属性を設定したい:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false, 
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall, 
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)] 
public class MyService : IMyService 
{ 
} 

WCFは大きな獣である、私はあなたがそれを学ぶないだろう、あなたはあなたの手の上で取得することができますジュバル・ロウィの本を見ていると、何か他のものをお勧めします日。

1

たぶん少しオフトピックが、それはアドレスの配慮4を行います。

セルフホスティングになり、「エンドポイントに関してできるだけ設定可能」である必要がある場合は、Managed Services Engineをご覧ください。 MSEはMicrosoftサービスによって作成されたオープンソース製品で、サービスを仮想化できます。基本的には、それ自身のリポジトリからのメタデータを使用してサービスを公開するWCFホストです。いくつかの機能は、サービスのサイド・バイ・バージョンのサポート、サービスに対する操作の有効/無効、エンドポイントへの操作のマッピング、操作にポリシーを適用する機能です。

あなたのニーズに合っているかどうかはわかりませんが、特に設定が必要な場合は特に検討する価値があります。

+0

MSEはちょっと古いですね。 –

+0

はい、いいえ。最新リリースは2009年5月にリリースされ、積極的に開発されています。しかし、SOAのロードマップに合っていれば、わからない(おそらく、Microsoft Servicesによって開発されて以来) –

+0

リリースの間は2年ほど経ちましたので、もう少し古いと言います。 :) –

関連する問題