2

回答

这是一个配置问题。

我们在应用程序中有两个服务。在出现问题之前,这两个服务都具有匹配且运行良好的显式绑定配置。一项服务将被删除,因此开发人员删除了显式绑定配置,忘记了 .NET 4.0 提供默认(和不同)绑定。

无论哪个服务首先被击中,它的设置都不会与任何其他设置不兼容(因为它是第一个)并且会很好。随后加载的服务将具有不同的绑定设置并被 TransportManager 拒绝。

明显的间歇性是由于我们只关注剩余的一项服务,认为另一项服务不再存在。监控实用程序仍在访问已删除的服务,有时会在我们在配置更改后重新加载其他服务之前进入。



原始问题

首次在 IIS 中启动服务时出现间歇性错误。如果我对任何配置进行空白更改并重新加载,那么大约 50% 的时间服务会正常运行。一旦它起来,它很好去。但是下次我们部署到这个盒子时,我们会重新开始俄罗斯轮盘赌。

我们已经查看了有关相同错误的其他论坛帖子,但到目前为止还没有提出明确的解决方案。我们花了一段时间才意识到我们尝试的配置更改实际上并没有影响问题,因为仅仅一个空格更改就足以让它重新开始并让它在部分时间工作。似乎 TransportManagerTable 内部存在某种竞争条件,当服务无法启动时它可能是空的?不确定,尝试进行一些跟踪或其他内容,以便为我们提供有关 TransportManagerTable 实例中内容的更好信息。


没有为 URI 'net.tcp://box:10101/DEV/AwesomeService.svc' 找到兼容的 TransportManager。这可能是因为您使用了指向虚拟应用程序之外的绝对地址,或者端点的绑定设置与其他服务或端点设置的不匹配。请注意,同一协议的所有绑定在同一应用程序中应具有相同的设置。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.InvalidOperationException:没有为 URI 'net.tcp://box:10101/DEV/AwesomeService.svc' 找到兼容的 TransportManager。这可能是因为您使用了指向虚拟应用程序之外的绝对地址,或者端点的绑定设置与其他服务或端点设置的不匹配。请注意,同一协议的所有绑定在同一应用程序中应具有相同的设置。

源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[InvalidOperationException:没有为 URI 'net.tcp://box:10101/DEV/AwesomeService.svc' 找到兼容的 TransportManager。这可能是因为您使用了指向虚拟应用程序之外的绝对地址,或者端点的绑定设置与其他服务或端点设置的不匹配。请注意,同一协议的所有绑定在同一应用程序中应具有相同的设置。]
System.ServiceModel.Channels.TransportChannelListener.ThrowTransportManagersNotFound() +8955459 System.ServiceModel.Channels.TransportChannelListener.SelectTransportManagers() +16199511 System.ServiceModel.Channels。 TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback) +71
System.ServiceModel.Channels.TcpChannelListener`2.OnOpen(TimeSpan timeout) +182
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +789
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout) +375

[InvalidOperationException:'net.tcp://box:10101/DEV/AwesomeService.svc' 上的 ChannelDispatcher 与合同 '“IAwesomeService”,“ILoggingService”' 无法打开其 IChannelListener。]
System.ServiceModel.Dispatcher .ChannelDispatcher.OnOpen(TimeSpan 超时) +16199205
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan 超时) +789 System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan 超时) +126
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan 超时) ) +789
System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +287
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +1132

[ServiceActivationException:服务'/DEV/AwesomeService.svc'由于编译过程中的异常而无法激活。异常消息是: 'net.tcp://box:10101/DEV/AwesomeService.svc' 上的 ChannelDispatcher 与合同 '"IAwesomeService", "ILLoggingService"' 无法打开其 IChannelListener..] 系统。 Runtime.AsyncResult.End(IAsyncResult 结果) +890624
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult 结果) +180062
System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) +107

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.1

4

2 回答 2

2

编辑配置以设置地址为空并修复错误。

于 2013-05-24T10:10:13.650 回答
2

要添加更多说明,问题很可能在您的服务的 Web.Config 文件中。在节点中,确保您的端点地址是一个空字符串 - 或 - 确保您的端点地址 URL 指向您的服务的确切位置,如您在 IIS 中指定的那样。

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyServiceBinding" contract="MySolution.IMyService"/>
于 2015-06-12T18:33:54.577 回答