1 部署IIS

1.1 安装WAS

IIS原本是不支持非HTTP协议的服务,为了让IIS支持net.tcp,必须先安装WAS(Windows Process Activation Service),即windows进程激活服务。

打开控制面板--程序和功能--打开或关闭windows功能,安装WAS,如图:

安装完毕后在Services窗口中可以到到如下服务:Windows Process Activation Service;Net.Msmq Listener Adapter;Net.Pipe Listener Adapter;Net.Tcp Listener Adapter;Net.Tcp Port Sharing Service.这几个服务。确定Net.Tcp Listener Adapter 与Net.Tcp Port Sharing Service是否已经启动。

1.2  确定WCF是否启用Non-Http支持
同样是在控件面板中打开这个功能,如图:

1.3 给站点添加net.tcp绑定

在IIS中,选中你的网站,然后在右边的操作菜单栏中单击绑定,会弹出一个“网站绑定”窗口,点击添加,类型选择net.tcp

1.4 启用net.tcp协议

选择你的网站,点击“高级设置”,弹出的的窗体中,在“已启用的协议”一栏中手动添加:net.tcp

2 测试服务

2.1 新建服务

用VS2010新建一个WCF服务,为了简单,我就直接用VS默认生成的作测试了。只有一个GetData方法

下面是配置的Config:

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <system.web>
  4. <compilation debug="true" targetFramework="4.0" />
  5. </system.web>
  6. <system.serviceModel>
  7. <protocolMapping>
  8. <add scheme="tcp" binding="netTcpBinding"/>
  9. </protocolMapping>
  10. <bindings>
  11. <netTcpBinding>
  12. <binding name="netTcpBindConfig"  closeTimeout="00:30:00" portSharingEnabled="true"
  13. openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
  14. transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
  15. hostNameComparisonMode="StrongWildcard" listenBacklog="10">
  16. <readerQuotas maxDepth="2147483647"
  17. maxStringContentLength="2147483647"
  18. maxArrayLength="2147483647"
  19. maxBytesPerRead="2147483647"
  20. maxNameTableCharCount="2147483647" />
  21. <reliableSession ordered="true"  inactivityTimeout="00:01:00" enabled="false" />
  22. <security mode="None">
  23. <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"  />
  24. <message clientCredentialType="Windows"  />
  25. </security>
  26. </binding>
  27. </netTcpBinding>
  28. </bindings>
  29. <services>
  30. <service behaviorConfiguration="MyBehavior" name="WCFService.Service1">
  31. <endpoint address="" binding="netTcpBinding" contract="WCFService.IService1" bindingConfiguration="netTcpBindConfig"></endpoint>
  32. <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
  33. </service>
  34. </services>
  35. <behaviors>
  36. <serviceBehaviors>
  37. <behavior name="MyBehavior" >
  38. <serviceMetadata/>
  39. <serviceDebug includeExceptionDetailInFaults="true" />
  40. <dataContractSerializer maxItemsInObjectGraph="6553600"/>
  41. </behavior>
  42. </serviceBehaviors>
  43. </behaviors>
  44. </system.serviceModel>
  45. <system.webServer>
  46. <modules runAllManagedModulesForAllRequests="true"/>
  47. </system.webServer>
  48. </configuration>

2.2 发布服务

将服务发布到IIS,在浏览器中访问服务,如果访问正常就说明服务部署成功,如图:

2.3 测试服务

新建一个控制台项目,测试服务。添加服务

3 遇到的问题

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

这可能是你的网站中没有启用net.tcp协议所到致,也就是少了上面的1.4.

问题2:未找到 URI“net.tcp://gyoung/Service1.svc/mex”的兼容 TransportManager。这可能是因为使用了指向虚拟应用程序外部的绝对地址,或终结点的绑定设置与其他服务或终结点所设置的绑定设置不匹配。 请注意,同一协议的所有绑定在同一应用程序中应具有相同的设置。

这个问题我并没有找到真正的原因,应该是binding设置的原因,我原先的binding配置是:

  1. <binding name="netTcpBindConfig"  closeTimeout="00:30:00" portSharingEnabled="true"
  2. openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
  3. transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
  4. hostNameComparisonMode="StrongWildcard" listenBacklog="10"
  5. maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10"
  6. maxReceivedMessageSize="2147483647">

这样的话会出现上面的错误,但当我将后面四个节点去掉后,即变成:

  1. <binding name="netTcpBindConfig"  closeTimeout="00:30:00" portSharingEnabled="true"
  2. openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
  3. transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
  4. hostNameComparisonMode="StrongWildcard" listenBacklog="10">

就没有报这个错误了。最后一个问题,园子里哪位大神知道具体原因的,求指导~

问题3有没有必要绑定host地址?

之前我在service节点下有增加host地址

  1. <host>
  2. <baseAddresses>
  3. <add baseAddress="http://localhost:4504"/>
  4. <add baseAddress="net.tcp://localhost:808/Service1.svc"/>
  5. </baseAddresses>
  6. </host>

但我发现这根本不起作用,因不不管我怎么设置,最后我的net.tcp地址都是上面那个,是我设置有错误?

补充一点:

如果你的Silverlight 程序无法调用net.tcp服务,可能是你少了跨域文件:clientaccesspolicy.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <access-policy>
  3. <cross-domain-access>
  4. <policy>
  5. <allow-from http-request-headers="*">
  6. <domain uri="*"/>
  7. </allow-from>
  8. <grant-to>
  9. <resource path="/" include-subpaths="true"/>
  10. <socket-resource port="4502-4530" protocol="tcp" />
  11. </grant-to>
  12. </policy>
  13. </cross-domain-access>
  14. </access-policy>

将clientaccesspolicy.xml放到IIS的根目录:C:\inetpub\wwwroot中,因为SL默认只访问80端口,所以要增加这个文件。

参考:http://www.fengfly.com/plus/view-197313-1.html

WCF开发中将net.tcp协议寄宿到IIS的方法的更多相关文章

  1. WCF:如何将net.tcp协议寄宿到IIS

    1 部署IIS 1.1 安装WAS IIS原本是不支持非HTTP协议的服务,为了让IIS支持net.tcp,必须先安装WAS(Windows Process Activation Service),即 ...

  2. [转]WCF:如何将net.tcp协议寄宿到IIS

    本文转自:http://www.cnblogs.com/Gyoung/archive/2012/12/11/2812555.html 1 部署IIS 1.1 安装WAS IIS原本是不支持非HTTP协 ...

  3. python 全栈开发,Day35(TCP协议 粘包现象 和解决方案)

    一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...

  4. 传输层tcp协议以及scoket套字节方法

    一.传输层 1.传输层的由来: 网络层的IP帮我们区分子网 以太网的Mac帮我们找到主机 所以通过IP和Mac找到了一台特定的主机 如何找到该特定主机的应用程序呢? 答案是通过端口,端口即应用程序与网 ...

  5. C++开发的基于TCP协议的内网聊天工具

    项目相关地址 源码:https://github.com/easonjim/TCPChat bug提交:https://github.com/easonjim/TCPChat/issues

  6. WCF分布式4:客户端访问寄宿在IIS中的WCF服务

    部署过程比较简单,新建一个站点,指向服务的物理路径,设置一个端口.即可. 新建的站点对应一个应用程序池,设置应用程序池中的.NET版本为4.0 写一个测试客户端,访问IIS中的WCF服务,可能会出现, ...

  7. TCP协议的性能评测工具 — Tcpdive开源啦

    Github地址:https://github.com/fastos/tcpdive 为什么要开发Tcpdive 在过去的几年里,随着移动互联网的飞速发展,整个基础网络已经发生了翻天覆地的变化. 用户 ...

  8. TCP协议调试工具TcpEngine V1.3.0使用教程

    简介   这里说的TCP协议调试定义是在开发长连接TCP协议应用时,为了验证代码流程或查找bug,需要与对端交互数据过来,当需要时可以暂停发送:单条发送:跳过发送:正常发送:发送时修改数据等.   T ...

  9. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

随机推荐

  1. 链表的C/C++实现

    一个链表实现,函数声明放在 list.h 头文件汇总,函数定义放在list.cpp 中,main.cpp 用来测试各个函数. 1.文件list.h // list.h #ifndef __LIST_H ...

  2. java之不修改变量的数据类型的处理方式

  3. Cucumber java + Webdriver(一)

    一.打开Eclipse,新建一个maven项目,打开pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

  4. 99种用Racket说I love you的方式

    99种用Racket说I love you的方式 来源 https://www.tuicool.com/articles/qiyeAz 原文  http://www.soimort.org/posts ...

  5. c++11 基于范围的for循环

    c++11 基于范围的for循环 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> # ...

  6. NOIP2017逛公园(park)解题报告

    park作为今年noipday1最后一道题还是相比前面几道题还是有点难度的 首先你可以思考一下,第一天dp不见了,再看一下这题,有向图,看起来就比较像一个dp,考虑dp方程,首先肯定有一维是到哪个节点 ...

  7. 【题解】 bzoj4472: [Jsoi2015]salesman (动态规划)

    bzoj4472,懒得复制,戳我戳我 Solution: 题面意思:从\(1\)号节点出发,每到一个节点就必须停下,获得节点权值(每个节点只会获得一次),每个点有个规定的停留次数,求最大可获得多大权值 ...

  8. 【BZOJ4500】矩阵(差分约束)

    [BZOJ4500]矩阵(差分约束) 题面 BZOJ 然而权限题 题解 显然拆分行和列.不妨设这一行/列总共加减的值是\(p\),那么每一个限制就是两个数的和为一个特定的数.这样子不好做,反正是一个二 ...

  9. HDU 4280 Island Transport(网络流,最大流)

    HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...

  10. CAP定理为什么只能同时满足两个

    Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容忍性) 可靠性 在网上看了很 ...