关于IIS7 host WCF service支持netTCP协议问题

在用IIS7 host WCF服务时,准备使用传说中IIS7支持的netTCP协议,过程中遇到以下问题:

第一个问题
站点绑定添加于修改也可以直接通过IIS管理器进行:选择相应站点=〉在右边的部分“Bindings”=〉在弹出的Site Bindings对话框中可以添加新的站点绑定和编辑现有的站点绑定,弹出的Site Bindings对话框中的类型中没有net.tcp类型
运行appcmd.exe set site 可以将该网站设置上net.tcp类型,但不可在IIS7上编辑、删除

第二个问题
运行appcmd.exe set app "localhost/MyService" /enabledProtocols:net.tcp 后,站点下的应用程序浏览后显示:
Http Error 503. The service is unavailable.
每次都是这样,这个IIS7 host的服务就无法连接上了;

第三个问题
客户端在调用基于netTCP的WCF接口时总是抛出异常:无法激活请求的服务“net.tcp://localhost/WasHostingDemo/CalculatorService.svc”....

环境是Vista Business,VS2008 sp1,开启了WAS non-http support。

问题解决:
第一个问题,安装了Vista的sp1包之后解决,Binding可以添加支持的任意一种类型。
网站默认不能启动,按启动后出现“Windows 进程激活服务 (WAS) 和万维网发布服务 (W3SVC) 未启动。。。”
通过在命令提示符处键入 net start W3SVC 并按 Enter,可以同时启动 WAS 和 W3SVC。(键入 net start WAS 可以单独启动W3SVC)

第二个问题,appcmd set app "localhost/MyService" /enabledProtocols:http,net.tcp,net.msmq
用这个命令添加支持协议不是增量式添加,一定要将准备支持的协议都enabled!

第三个问题
解决过程中出现新问题1:调试了几次后,用IIS host 使用了wsDualHttp协议的服务后,浏览服务出现了以下错误:
“MyService”应用程序中的服务器错误——无法加载DLL“mqrt.dll”:找不到指定的模块。(异常来自HRESULT:0x8007007E)
新问题1解决运行appcmd set app "localhost/MyService" /enabledProtocols:http,net.tcp更改应用程序设置后正常(net.msmq协议接口中暂未用到)。估计是应用程序池崩溃了,需要重启。

今天终于将问题完全搞定!事情原来是这样的:
在非IIS host的程序中,因为有个问题,WCF的bug貌似(Artech在他的博客中谈到这个问题:WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效),所以在服务的endpoint 中我们这么写:
<endpoint address="net.tcp://localhost/MyService" binding="netTcpBinding" contract="MyService.IMyService" />
但是,在IIS中BaseAddress是无效的,IIS自动加了应用程序站点名称作为前缀,即:"net.tcp://localhost/MyService",所以我们在IIS host的WCF服务里的配置文件的endpoint address中再写一遍地址就重复了,导致服务无法正确读取。
IIS host的WCF 服务正确的endpoint的配置写法是:
<endpoint address="" binding="netTcpBinding" contract="MyService.IMyService" />


我IIS7 host的WCF服务终于正确的调用起来啦!小小庆祝一下。。。

2009.9.22 add new
在IIS7中,
网站本身不能用于host 使用netTcp协议的WCF服务。如果要hostWCF服务,则必须用网站下挂的应用程序,并且给应用程序注册支持netTcp协议。注册协议时,netTcp用的哪个端口譬如net.tcp 8008:* 那么调用该端口的客户端web.config中的endpoint address=“net.tcp://machineName:8008/xxxService/xxx.svc”

另外,svc文件中必须注明CodeBehind="App_Code\xxx.cs"或者其它服务接口类实现代码所在文件。

原文地址:https://www.cnblogs.com/cubean/p/1555223.html