2010-01-21 53 views
0

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

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; 
     } 
    } 
} 

感谢

回答

0

你赶上异常E,再后来你发现一个不同的异常,但是你把原来的异常即

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

编辑

现在我已经仔细阅读多一点。

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

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

这是一个预期的行为,我想更新这里引发异常的上层,但是请优雅地关闭ServiceHost。 – ALexr111 2010-01-22 12:38:46

+0

但是,如果关闭服务主机生成异常,则只会抛出它。如果关闭服务主机,则上层将不会得到异常 – 2010-01-22 12:50:07

+0

您说得对,应该将同一行添加到上层异常中,但不幸的是,最初的问题仍然没有解决。 – ALexr111 2010-01-23 08:50:57

相关问题