重启/iisreset会禁用NET.TCP协议吗?

6
我正在Windows Server 08 sp2上的IIS7中托管WCF服务。该服务作为自己的网站托管,并通过NET.TCP端点公开。服务在重启或iisreset命令之前工作得很好。
但是,在重启或iisreset后,当我进行任何服务调用时,我会收到以下错误: “System.ServiceModel.EndpointNotFoundException:无法分派消息,因为地址为'net.tcp://[website]/[service_name].svc' 的端点处的服务不适用于该地址的协议..”
服务器的事件日志显示以下错误: “尝试读取和实例化配置的ProcessHandlerType时发生错误。 异常:System.ArgumentException 信息:未知协议ID“NET.TCP”。 StackTrace: at System.Web.Hosting.ProcessHost.StartProcessProtocolListenerChannel(String protocolId, IListenerChannelCallback listenerChannelCallback) ”
问题: 如何解决此问题?为什么在iisreset后禁用了NET.TCP协议?这是一个错误吗?我是否缺少某些配置?
IIS设置详细信息: - Server 08和08 R2 - 绑定:http,NET.TCP(808:*) - EnabledProtols:http,NET.TCP。 - 网站的应用程序池标识设置为特定用户。

这里提供样例代码:http://drop.io/wcfTcpSampleService

谢谢


1
不可取的解决方法: 如果我从站点的EnabledProtocols中删除NET.TCP,然后执行iisreset,再将NET.TCP添加回站点的EnabledProtocols,我就可以让它重新工作。该站点会一直工作,直到再次发出iisreset命令。当我将NET.TCP添加到EnabledProtocols时,IIS正在执行某些操作,而在已经添加NET.TCP的情况下启动IIS时则不会发生这种情况。 - Kevin McKinley
当发生这种情况时,Net.Tcp Listner服务的状态是什么?Net.Tcp Listner服务的启动类型设置为什么?系统或应用程序事件日志中是否有任何提示信息? - Paul Kearney - pk
Net.Tcp 监听器适配器已启动(启动类型:自动)。事件日志中的错误为“尝试读取和实例化配置的 ProcessHandlerType 时发生错误。异常:System.ArgumentException消息:未知协议 ID 'NET.TCp'。堆栈跟踪:在 System.Web.Hosting.ProcessHost.StartProcessProtocolListenerChannel(String protocolId, IListenerChannelCallback listenerChannelCallback)”。 - Kevin McKinley
是的,我遇到了同样的问题。我的解决方法是从网站绑定列表中删除 net.tcp 绑定,然后再将其添加回来。然后它就可以工作了。这太糟糕了! - smwikipedia
4个回答

9
解决了。问题在于大小写敏感。在Web应用程序的AdvancedSettings中,EnabledProtocols字段必须小写,例如'net.tcp'(我从MS支持中学到了这一点)。
我错误地认为'NET.TCP'应该大写,因为EnabledProtocols字段的描述(“...添加这些值,例如NET.TCP...”)。
奇怪的、未知的问题是为什么第一次使用'NET.TCP'会起作用,但这是另一个问题。
感谢大家的帮助。

有没有微软支持关于大小写敏感性的链接可用? - alexandrul
@alexandrul MS的支持人员只提供了一个内部链接,描述了大小写敏感性。 - Kevin McKinley
我们在运行Windows Server 2012时遇到了这个问题。更改net.tcp的大小写没有任何影响。还有其他人遇到这个问题吗? - bkstill

1

NET.TCP和HTTP协议可以使用不同的端口吗?

更新

在我的电脑上一切正常,我已经尝试了重启和iisreset。我已经上传了您的项目及其二进制文件(使用Visual Web Developer 2010 Express),以及IIS设置的屏幕截图。应用程序池设置为.NET 4.0集成。

iis7 http://www.freeimagehosting.net/uploads/1a727d66ce.png


我在使用80和8008端口进行http,以及808、8009、8089和9200端口进行tcp时遇到了问题。 - Kevin McKinley
@Kevin,你能否上传一个样例WCF服务到某个地方以供测试吗? - alexandrul
我在原问题中添加了一个下载链接。 - Kevin McKinley

0
你真的需要执行完整的 IISRESET 吗?我认为现代推荐的方法是通过重新启动应用程序池来实现完全重启托管在 Web 上的应用程序,如下所示:iisapp /a <App_Pool_ID> /r(Windows 2003)或appcmd recycle apppool /apppool.name:<App_Pool_Name>(Windows 2008)。

很遗憾,这个服务将被托管在许多人都可以访问的机器上,我无法阻止他们执行iisreset。当机器重新启动时,问题也会出现。 - Kevin McKinley

0
你安装了哪些版本的.NET框架(或者之前安装过哪些)?
我曾经遇到过非常类似的问题,当我从.NET 4 RC升级到RTM时,TCP服务使用的dll来自RC安装(但已不存在),导致服务停止运行。

.NET版本2.0、3.0、3.5。服务器08和08 R2机器都是全新安装的(一个虚拟机和一个物理机)。 - Kevin McKinley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接