gpt4 book ai didi

c# - 第一次执行时找不到 WCF 端点,第二次执行时找到

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:02 25 4
gpt4 key购买 nike

我来布置场景。

我们有一组 WCF 服务主机(S1, S2...Sn),它们在链中运行以处理接收到的消息,第一个服务进行一些处理,然后将消息交给下一个服务会做一些更多的处理等等。最终的 WCF 服务 (U) 接收 Sn 的输出并对其进行验证。

服务 S1、S2、...Sn 是通过与服务 U 分开的 .exe 文件启动的。服务 U 是从 Visual Studio 2010 的单元测试启动的,一旦启动,一条消息就会被发送到服务 s1 中进行处理。我们看到的问题是,一旦服务 Sn 尝试将消息传递给服务 U 进行验证,我们就会遇到错误:

There was no endpoint listening at http://localhost:9005/ValidationService.svc

奇怪的是这个错误只发生在第一次运行单元测试时。如果我们在初始失败后重新运行测试,测试将毫无问题地通过(Sn 成功将消息传递给 U)。然而,关闭服务 S1、S2、...Sn 重新启动并重新运行单元测试会导致“无端点监听...”在第一次运行测试时再次抛出。

我的想法是服务 U 可能仍在完成其打开过程,而服务 Sn 试图向它发送消息,但我不相信,如果这是在将消息发送到 S1 之前,我们如何确定服务 U 已打开并正在监听?

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();
}

如有任何帮助,我们将不胜感激。

最佳答案

我认为您假设第一个 ServiceHost 正在初始化而第二个 ServiceHost 进行调用可能是正确的。

要处理此问题,您可以将委托(delegate)挂接到 ServiceHost 的 Opened 事件并从那里运行您的第二个服务。

关于c# - 第一次执行时找不到 WCF 端点,第二次执行时找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com