c# - 如何确定 WCF 服务已准备就绪?

标签 c# wcf

我有以下场景:

我的主应用程序 (APP1) 启动了一个进程 (SERVER1)。 SERVER1 通过命名管道托管 WCF 服务。我想连接到这个服务(来自 APP1),但有时它还没有准备好。

我创建了 ChannelFactory,打开它并让它生成一个客户端。如果我现在在生成的客户端上调用一个方法,我会收到一条异常消息,告诉我找不到 Enpoint:

var factory = new ChannelFactory<T>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe//localhost/myservice");
factory.Open()

var Client = factory.CreateChannel();
Client.Foo();

如果我在调用服务之前稍等片刻,一切都很好;

var Client = factory.CreateChannel();
Thread.Sleep(2000);
Client.Foo();

我如何确保服务准备就绪而无需等待随机时间?

最佳答案

如果一般情况是您只是在等待其他服务启动,那么您也可以使用在您的界面上设置一个什么都不做的“Ping”方法,然后重试直到它开始响应。

我们做了类似的事情:我们尝试在启动时循环调用 ping 方法(重试间隔 1 秒),在我们的日志中记录(但最终忽略)任何发生的 TargetInvocationException 尝试到达我们的服务。一旦我们得到第一个正确的回应,我们就继续前进。

当然,这只涵盖了启动预热情况 - 服务可能会在成功 ping 后关闭,或者我们可能会因为“服务未准备好”以外的原因得到 TargetInvocationException

关于c# - 如何确定 WCF 服务已准备就绪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5391893/

相关文章:

使用 foreach 循环的 C# List 或 Collection 初始值设定项

c# - 如何处理 IObservers 被处置?

c# - 调用 .DLL 的 NUnit 测试调用 WCF Web 服务 (.NET C#)

asp.net-mvc - Autofac 错误 - 从请求实例的范围中看不到具有匹配 'AutofacWebRequest' 的标签的范围

WCF DataService,如何避免 POCO 中的 [DataServiceKey]

c# - 动态添加控件数组到winform

c# - 使用 native C++、托管 C++ cli 和 C# 解决方案在混合模式下进行调试

c# - 使用匿名委托(delegate)返回对象

c# - 使用 WCF ResponseFormat = WebMessageFormat.Json 时忽略类的属性

wcf - Global.asax 的 Application_Start 方法没有被调用