.NET WCF - 服务自动重启时,IP端点上已有监听器

时间:2013-01-22 15:26:30

标签: wcf windows-services

我有一个在服务器上部署为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时创建和打开通道。

0 个答案:

没有答案