利用可能な 2 つのエンドポイントの1 つだけを使用するように WCF を構成する方法は?
2 つの TCP ポートが必要です (したがって を使用しますnetTcpBinding
)。サービス ホストは、最初のポートへのバインドを最初に試行する必要があります。失敗した場合にのみ、2 番目のポートへのバインドを試行する必要があります。
編集
プログラムで達成できることはわかっていましたが、宣言的に(.config
ファイルのみを使用して)行うつもりです。
利用可能な 2 つのエンドポイントの1 つだけを使用するように WCF を構成する方法は?
2 つの TCP ポートが必要です (したがって を使用しますnetTcpBinding
)。サービス ホストは、最初のポートへのバインドを最初に試行する必要があります。失敗した場合にのみ、2 番目のポートへのバインドを試行する必要があります。
編集
プログラムで達成できることはわかっていましたが、宣言的に(.config
ファイルのみを使用して)行うつもりです。
ポート番号を含むエンドポイント アドレスは、プロキシ オブジェクトを使用して接続を開く前に、プロセスのどの時点でもコードで設定できます。したがって、アドレスを設定して接続をテストし、失敗した場合は他のポートを試すことができます。これが私の要点をうまく説明するコードです。
Dim oProxy as New YourWCFServiceType()
oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try first"))
Dim FirstBindingSucceeded as Boolean
Try
oProxy.Open()
FirstBindingSucceeded = True
Catch
End Try
If FirstBindingSucceeded = False Then
oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try second"))
End If
oProxy.Open()
サーバー側では、2 つのバインディングを使用してサービスを公開することに問題はありません。
ただし、クライアント側では、重複した契約エラー (またはその旨の言葉) が表示されます。
これを行う 1 つの方法は、名前以外は同一の 2 つのインターフェース (コントラクト) を作成することです。
実装の単一のコピーがあり、各サービスはこの実装から継承します。
次に、同じ実装/機能を持つ異なるポートに 2 つのサービスがあります。
クライアントでは、最初のポートを最初に試行し、それが失敗した場合は 2 番目のポートを試行するようにプログラムする必要があります。