Webロールインスタンスでもワーカーロールインスタンスでも、どちらも基本的にWindows 2008 Serverであるため(WebロールでIISが実行されており、いくつかのポートを消費するため)、アプローチは同じです。wcfサービスをハングアップするポートはどれでも、これらを入力エンドポイント(ポートごとに1つのエンドポイント)として定義し、そのエンドポイントを処理する役割も決定します。
使用可能なポートがある限り、複数のServiceHostを使用できます。現在、デプロイメントごとに合計25の入力エンドポイントと合計25の内部エンドポイントに制限されているため、これが絶対的な制限です。もちろん、RDPを有効にすると、使用可能なポート数が減少します。ああ:プロトコルに関して:プロトコルはエンドポイント定義で定義されているので、httpとtcpの両方が必要な場合は、2つのエンドポイントを定義する必要があります。
内部エンドポイントWCFサービスはほとんど同じですが、セキュリティを廃止し、net.tcpを使用して高速転送を行うことができます。ただし、負荷分散の1つの違いは次のとおりです。
- 入力エンドポイントにぶら下がっているWCFサービスは、ロールのすべてのインスタンス間で負荷分散されます
- 内部エンドポイントにハングしているWCFサービスは、負荷分散されません。
後者の場合:Webロールが内部エンドポイント上のワーカーロールのWCFサービスと通信する必要があるとします。すべてのインスタンスを列挙し、それぞれのIP +ポートを取得してから、ランダムに1つ(またはラウンドロビン、または選択した方法)を選択する必要があります。これは、指定されたロールと指定されたエンドポイント名(Michael Washamのブログから借用したコード)からランダムなエンドポイントインスタンスを返すサンプルメソッドです。
private String GetRandomServiceIP(String roleName, String endPointName)
{
var endpoints = RoleEnvironment.Roles[roleName].Instances.Select(i => i.InstanceEndpoints[endPointName]).ToArray();
var r = new Random(DateTime.Now.Millisecond);
int ipIndex = r.Next(endpoints.Count());
return endpoints[ipIndex].IPEndpoint.Address.ToString();
}
WCFサービスと関連するURIのセットアップに関しては、最新のWindows Azureトレーニングキットを入手し、ServiceHostのセットアップについて詳しく説明しているWorkerRoleCommunicationハンズオンラボをウォークスルーすることを強くお勧めします。入力エンドポイントと内部エンドポイント。