我有一个在服务器上部署为Windows服务的WCF服务。它配置为在恢复时自动重新启动(在Services.msc实用程序中的服务的“属性”对话框中)。但是,当服务自动重新启动时,它会引发以下异常:
System.ServiceModel.AddressAlreadyInUseException:IP端点0.0.0.0:8093上已有一个侦听器。确保您没有尝试在应用程序中多次使用此端点,并且没有其他应用程序在此端点上进行侦听。
它仍然开始,但处于故障状态。当我手动重新启动它时,我没有收到此错误(虽然它在我在故障状态下重新启动后尝试停止服务时会发出警告)。
就好像服务重启太快,服务管理器认为还有另一个服务正在侦听该端口。我将服务配置为在5分钟后重新启动。我还在命令行执行了 netstat -a -n -o ,以验证该端口上唯一的服务是我的。
代理尝试按如下方式中止服务:
public byte[] ConvertDocument(ConversionType conversionType, byte[] documentData)
{
byte[] result = null;
IDocumentConverter server = this.channelFactory.CreateChannel();
try
{
((ICommunicationObject)server).Open();
result = server.ConvertDocument(conversionType, documentData);
((ICommunicationObject)server).Close();
}
finally
{
if (((ICommunicationObject)server).State != CommunicationState.Closed)
((ICommunicationObject)server).Abort();
}
return result;
}
还有其他人有过这种问题吗?
更新
即使将InstanceContextMode更改为PerSession和Single,我仍然遇到此问题。
我想知道客户端是否在端口上保持连接活动,因此当服务重新启动时,它认为端口已在使用中。
我的客户端实现方式是否可能导致AddressAlreadyInUseException?例如,在OperationContract中吞下CommunicationException,或者在每次调用OperationContract时创建和打开通道。