シーンを設定します。
一連の WCF サービス ホスト(S1、S2...Sn)があり、チェーンで動作して受信したメッセージを処理します。最初のサービスが何らかの処理を行い、メッセージを次のサービスに渡します。次のサービスはさらに処理を行います。の上。最終的な WCF サービス(U)は、Sn の出力を受け取り、それを検証します。
サービスS1、S2、...Snは、サービスUとは別に .exe ファイルを介して開始されます。サービスUは、Visual Studio 2010 の単体テストから開始され、開始されるとメッセージが処理のためにサービス s1 に送信されます。私たちが見ている問題は、サービスSnが検証のためにメッセージをサービス U に渡そうとすると、エラーが表示されることです。
http://localhost:9005/ValidationService.svcでリッスンしているエンドポイントがありませんでした
奇妙なことに、このエラーは単体テストの最初の実行時にのみ発生します。最初の失敗の後にテストを再実行すると、テストは問題なくパスします ( SnはメッセージをUに正常に渡します)。ただし、サービスS1、S2、...Sn を閉じて単体テストを再起動して再実行すると、テストの最初の実行時に「no endpoint listens...」が再度スローされます。
私の考えでは、サービスUは、サービスSnがメッセージを送信しようとしている間、まだ開始プロセスを完了している可能性がありますが、私には確信がありません. S1に?
サービスUは、次のコードによって開始されます。
public void TestChain()
{
var binding = new BasicHttpBinding();
// Construct service U
var serviceHostU = new ServiceHost(typeof(ChainContract), "http://localhost:9005");
serviceHostU.AddServiceEndpoint(typeof(ChainContractImplementation), binding, "ValidationService.svc");
serviceHostU.Open();
//fire message into service s1
var ep = new EndpointAddress("http://localhost:8777/InputService.svc");
var inputFactory = new ChannelFactory<ChainContract>(binding, ep);
var channel = inputFactory.CreateChannel();
//fire a message into service s1.
channel.ReceiveMessage(new TestMessage());
serviceHostU.Close();
}
どんな助けでも大歓迎です。