导航

WCF 基于TCP的服务在IIS7中寄宿

Posted on 2013-07-31 16:13  理工.net  阅读(1138)  评论(2编辑  收藏  举报

参考博文:

使用 WAS 扩展 HTTP 之外的 WCF 服务

如何进行基于非HTTP的IIS服务寄宿

HowTo: netTcpBinding on IIS and things to remember

将使用netTcp绑定的WCF服务寄宿到IIS7上全记录

在上面这些参考的博文中,都有提到如何部署,下面再结合个人实践重复一遍:

目标服务器:IIS7,Windows 7

1. 安装WAS (Windows Process Activation Service)服务和WCF的HTTP 和Non-Http的激活组件,默认情况是都没有安装的。

1.1:WAS: Win+R——输入: OptionalFeatures.exe ,出现”打开或关门Window功能”的窗口,如下图

clip_image001

将(Windows Process Activation Service下的组件打上勾。

1.2:WCF HTTP和No HTTP激活组件:在上图中将下面的组件也打上勾:

clip_image002

点击确定,开始上面选择的组件安装。

2. IIS注册asp.net 4.0

找到Visual Studio 命令提示(2010),输入:aspnet_regiis –i

clip_image004

3. 启动服务: NetTcpPortSharing ,NetTcpActivator ,Windows Process Activation Service

Win+R——》输入services.msc,出现服务管理窗口,启动上面提到的服务(如果没有启动):

clip_image006

4. 编写WCF应用程序

5. 部署

l 在IIS7中新建网站 TCPDemo,执行编写WCF应用程序的解决方案文件夹

l 给网站添加net.tcp的绑定,如下图:

clip_image008

绑定信息:809:* 表示从809进来的任何请求都处理

l 添加应用程序,指向我们的服务项目

l 为新添加的应用程序,启用net.tcp协议,如下图:

clip_image010

l 浏览服务,如下(用net.tcp提供服务元数据):

clip_image012

l 添加服务引用:

clip_image014

到此基本完成。

遇到过的问题:

1, 在浏览器中浏览服务时,提示:

Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

原因:在安装WAS 和WCF 的Http 或non-Http激活组件时,将IIS的.net framework版本更新为3.0的版本了;而我们的wcf应用程序是在.net framework 4.0上创建的。

解决方法:IIS注册asp.net4.0.

2, 在浏览器中,浏览服务时:

找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注册的基址方案是 [http]

该现象的原因时:没有给网站添加net.tcp的绑定。

3, 添加服务应用时提示:

无法调度消息,因为终结点地址“net.tcp://szc0292:809/TCP_IIS/Service1.svc/mex”上的服务对该地址的协议不可用。

我的遇到该现象的原因是:

l 没有改网站下的应用程序启用net.tcp协议

l NetTcpPortSharing ,NetTcpActivator 2个服务在不同的进程里面,一个指向3.0的SMSvcHost.exe,一个指向的4.0的SMSvcHost.exe;解决方法:将指向3.0 的SMSvcHost.exe服务路径该为何4.0的;WIN +R—》cmd——》输入:

Sc config NetTcpActivator binpath= "C:\Windows\Microsoft.NET\Framework\v4.0.30319\SMSvcHost.exe";在重新启动NetTcpActivator服务,问题解决。

4,不能将服务部署在网站上,必须在网站下新建应用程序执行要部署的TCP服务。

代码下载:https://files.cnblogs.com/webJingGao/TCP%40IIS.rar