即使服务端点地址有效,WCF也会发送相同的异常

时间:2010-01-21 20:07:57

标签: wcf service endpoint

我遇到了一个非常奇怪的WCF问题。如果没有收到可到达的端点IP地址或服务无法绑定,我需要为WCF服务实现一些恢复行为。 如果应用程序在服务创建异常时失败,则流程很简单,它会终止它并向用户请求另一个IP地址并执行另一次创建服务的尝试。 (下面的代码片段)。如果地址无效,我收到“A TCP错误(10049:请求的地址在其上下文中无效),同时收听IP Endpoint = .121.10.11.11”异常,但出于任何原因,如果我尝试第二次尝试有效地址我从先前的尝试中获得了与错误IP地址相同的异常。这是一个代码:

ServiceHost service = null;
try
{
    Uri[] uris = { new Uri(Constants.PROTOCOL + "://" + address + ":" + port) };
    service = new ServiceHost(typeof(IRemoteService), uris);
    NetTcpBinding tcpBinding =
        WcfTcpRemoteServicesManager.LessLimitedNewNetTcpBinding(int.MaxValue,
            int.MaxValue, int.MaxValue);
    ServiceEndpoint ep = service.AddServiceEndpoint(implementedContract.FullName,
        tcpBinding, serviceName);
    var throttle =
        service.Description.Behaviors.Find<ServiceThrottlingBehavior>();
    if (throttle == null)
    {
        throttle = new ServiceThrottlingBehavior
        {
            MaxConcurrentCalls = Constants.MAX_CONCURRENT_CALLS,
            MaxConcurrentSessions = Constants.MAX_CONCURRENT_SESSIONS,
            MaxConcurrentInstances = Constants.MAX_CONCURRENT_INSTANCES
        };
        service.Description.Behaviors.Add(throttle);
    }
    service.Open();

}
catch (Exception e)
{
    _debugLog.WriteLineMessage(
        "Failed to open or create service exception. Exception message:" +
            e.Message);
    if (service!=null)
    {
        try
        {
            service.Close();
        }
        catch (Exception)
        {
            service.Abort();
            service.Close();
            throw e;
        }
    }
}

由于

1 个答案:

答案 0 :(得分:0)

你捕获异常e,然后你捕获一个不同的异常,但你抛出原来的异常e。

不确定这是否是您的问题,但可能会导致您收到令人困惑的异常。

修改

现在我已经仔细阅读了它。

问题是上下文和地址不匹配。我看到代码使用netTcpBinding:

  • 检查地址是否匹配,CONSTANTS.Protocol的值是什么?
  • 检查配置文件中是否存在冲突。