我正在使用WCF命名管道在我的应用程序中传递消息。使用以下代码,可以在应用程序启动期间正确实例化主机。
try
{
var host = new ServiceHost(typeof(TestService),
new Uri("net.pipe://localhost"));
var binding = new NetNamedPipeBinding();
binding.CloseTimeout = TimeSpan.MaxValue;
binding.OpenTimeout = TimeSpan.MaxValue;
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;
host.AddServiceEndpoint(typeof(ITestService), binding, "Test");
host.Open();
}
catch (Exception ex)
{
Logger.WriteLog(LogLevelL4N.Error, ex.Message);
}
应用程序可以正常运行,直到出现错误的随机点为止:
The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it has been Aborted.
据我了解,中止的主机无法重复使用,因此必须重新创建。在错误点,我重用了上面的代码,这是第二个错误:
"A registration already exists for URI 'net.pipe://localhost/Test'."
有人可以提供有关如何重新启动中止的ServiceHost的完整示例吗?