答案
这是一个配置问题。
我们在应用程序中有两个服务。在出现问题之前,这两个服务都有显式的绑定配置,这些配置匹配并且运行良好。其中一个服务将被删除,因此开发人员重新定义了显式绑定配置,忘记了.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超时) +182
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时) +789
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan超时) +375
InvalidOperationException:在‘net.tcp:// ChannelDispatcher :10101/DEV/awesomeService.svc’与合同‘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:// ChannelDispatcher :10101/DEV/awesomeService.svc’上的IAwesomeService‘,ILoggingService’无法打开它的IChannelListener。System.Runtime.AsyncResult.End(IAsyncResult结果) +890624
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult结果) +180062
System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) +107
版本信息:微软.NET框架版本:4.0.30319;ASP.NET版本:4.0.30319.1
发布于 2013-05-24 02:10:13
编辑配置以将地址设置为空,并修复错误。
发布于 2015-06-12 10:33:54
要添加更多的指令,这个问题很可能出现在服务的Web.Config文件中。在节点中,确保您的端点地址是空字符串-或-确保您的端点地址URL指向您在IIS中指定的服务的确切位置。
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyServiceBinding" contract="MySolution.IMyService"/>
https://stackoverflow.com/questions/6112612
复制相似问题