二、Net.TCP Port Sharing Service 从功能上讲,Net.TCP Port Sharing Service实现了和HTTP.SYS相同的功能:请求的监听和分发(request listening WCF对Net.TCP Port Sharing Service提供了原生的支持。 Net.TCP Port Sharing Service在WCF的实现原理如下图所示:在Net.TCP Port Sharing Service开启的状态下,如果我们通过两个服务寄宿应用程序分别寄宿两个服务 实际上,当ServiceHost的Open方法被执行的时候,WCF会将这两个地址,net.tcp://artech.com:8888/service1和net.tcp://artech.com:8888 /service2注册到Net.TCP Port Sharing Service中。
为了将一个IIS中的Web应用作为WCF服务的宿主,并采用非HTTP的通信协议,我们不但需要为Web应用所在的站点添加相应的站点绑定(net.tcp、net.pipe和net.msmq等),还需要为Web 如下所示的命令通过Appcmd.exe为默认站点(Default Web Site)添加了基于net.tcp、net.pipe和net.msmq的站点绑定,其中net.tcp绑定采用默认端口808。 最后为创建的Web应用同时开启了针对http、net.tcp、net.pipe和net.msmq四种协议的支持。 1: REM 为站点” Default Web Site”添加针对net.tcp,net.pipe和net.msmq站点绑定 2: appcmd.exe set site "Default Web [protocol='net.tcp',bindingInformation='808:*'] 3: appcmd.exe set site "Default Web Site" –+bindings
其中的TCPListener|TCP Listener Adapter 依赖于服务NetTcpPortSharing,为net.tcp绑定提供tcp的端口共享,具体可参看启用WCF NetTcpBinding 确保net.tcp方式,绑定到808端口 打开站点的高级设置,确认"已启用的协议"中,填有"net.tcp",没有的话,可以补上。 ? 建立好目录后,检查"高级设置–已启用的协议"中,是否已填上net.tcp,如果没有手工填上。到这里,基本的host环境我们已经设置好了。 serviceBehaviors> </behaviors> </system.serviceModel> 这里要注意的是endpoint的 address的填写,我填写成"net.tcp 相应的客户端的配置写法也比较特别: <system.serviceModel> <client> <endpoint address="<em>net.tcp</em>://
baseHttpAddress = new Uri("http://127.0.0.1/greetingservice "); 2: Uri baseTcpAddress = new Uri("net.tcp System.ServiceModel.NetTcpBinding 12: Contract: IHello 13: Endpoint 4 14: Address: net.tcp <add scheme="http" binding="basicHttpBinding" bindingConfiguration="" /> 4: <add scheme="<em>net.tcp</em> baseHttpAddress = new Uri("http://127.0.0.1/greetingservice "); 2: Uri baseTcpAddress = new Uri("net.tcp baseHttpAddress = new Uri("http://127.0.0.1/greetingservice "); 2: Uri baseTcpAddress = new Uri("net.tcp
那么我们在主机上部署多个TCP的WCF服务,只有有限开放端口的时候怎么办呢,答案就是启用NET.TCP的端口共享服务。通过端口共享服务,WCF就可以使用同一个端口部署多个服务: ? 启用端口共享服务只需要三个步骤: 启用 NET.TCP Port 共享服务(默认是禁用的) WCF 服务采用TCP 协议 设置 PortSharingEnabled 属性为 true 第一步. 启用 NET.TCP 端口共享服务 通过“开始”-〉“控制面板”-〉“管理工具”-〉服务,打开如下图所示的“服务对话框”,然后定位到Net.TCP Port Sharing Service。 NetTcpBinding binding = new NetTcpBinding(); binding.PortSharingEnabled = true; 该绑定隐式允许外部进程(即承载 Net.TCP 更详细的信息请参见配置 Net.TCP 端口共享服务。
IIS外、长时间运行的WCF服务 (2)、受所有windows版本的支持 (3)、由操作系统控制控制服务进程的生存期 3.2、Windows服务(以前成为NT服务)支持的传输 (1)、HTTP (2)、net.tcp 通讯,启用net.tcp通讯就必须依靠Windows 进程激活服务(也称为 WAS)在控制面板->程序和功能->打开或关闭windows功能勾选以下几个功能,安装WCF 激活组件 ? 可以看到Calculate.svc服务寄宿失败,这是因为ServiceCalculator.svc启用的是net.tcp通讯,而在IIS中启用net.tcp通讯就必须依靠Windows 进程激活服务(也称为 WAS) 关于如何启用net.tcp通讯,上面已经介绍过了,所以这里就不说了,ok,在net.tcp通讯启用的情况下,配置承载服务的WCFHost网站,添加net.tcp通讯 ? 点击网站的高级设置,在已启用的协议后追加net.tcp协议 ? 重新打开Calculate.svc ? ok,说明Calculate服务部署成功! 第五步:使用wcftestclicnt进行测试 ?
1:创建服务器的套接字ServerSocket 2:监听客户端的套接字 3:获取输入流读取内容 4:关闭套接字 发送端: package net.tcp; import java.io.DataOutputStream (IOException e) { e.printStackTrace(); } } } } 接收端: package net.tcp (IOException e) { e.printStackTrace(); } } } } 用户一 package net.tcp Server(8989); new Thread(server).start(); new Thread(send).start(); } } 用户二 package net.tcp
service name="Artech.ThrottlingDemo.Service.CalculatorService"> 6: <endpoint address="<em>net.tcp</em> " binding="netTcpBinding" contract="Artech.ThrottlingDemo.Service.Interface.ICalculator" listenUri="<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice"/> 7: <endpoint address="<em>net.tcp</em>://127.0.0.1:8888 如果我们创建了基于服务类型CalculatorService的ServiceHost,并成功开启它,虽然该ServiceHost具有三个终结点,由于前两个共享相同的监听地址,所以实际采用的监听地址只有两个,即<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice和<em>net.tcp</em>://127.0.0.1:9999/calculatorservice。
Peer network(对等网)、IPC(基于命名管道的内部进程通信)以及MSMQ(微软消息队列),每个协议对应一个地址类型: HTTP地址:http://localhost:8080/ TCP地址: net.tcp baseAddresses> <add baseAddress = "http://localhost:9999/WcfStudy3/Service1" /> <add baseAddress = "<em>net.tcp</em> baseAddresses> <add baseAddress = "http://localhost:9999/WcfStudy3/Service2" /> <add baseAddress = "<em>net.tcp</em> WSHttpBinding_IService" contract="WcfSvc1.IService" name="WSHttpBinding_IService"> </endpoint> <endpoint address="<em>net.tcp</em> WSHttpBinding_IService1" contract="WcfSvc2.IService" name="WSHttpBinding_IService1"> </endpoint> <endpoint address="<em>net.tcp</em>
service name="Artech.ThrottlingDemo.Service.CalculatorService"> 6: <endpoint address="<em>net.tcp</em> " binding="netTcpBinding" contract="Artech.ThrottlingDemo.Service.Interface.ICalculator" listenUri="<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice"/> 7: <endpoint address="<em>net.tcp</em>://127.0.0.1:8888 如果我们创建了基于服务类型CalculatorService的ServiceHost,并成功开启它,虽然该ServiceHost具有三个终结点,由于前两个共享相同的监听地址,所以实际采用的监听地址只有两个,即<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice和<em>net.tcp</em>://127.0.0.1:9999/calculatorservice。
service name="Artech.ThrottlingDemo.Service.CalculatorService"> 6: <endpoint address="<em>net.tcp</em> " binding="netTcpBinding" contract="Artech.ThrottlingDemo.Service.Interface.ICalculator" listenUri="<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice"/> 7: <endpoint address="<em>net.tcp</em>://127.0.0.1:8888 如果我们创建了基于服务类型CalculatorService的ServiceHost,并成功开启它,虽然该ServiceHost具有三个终结点,由于前两个共享相同的监听地址,所以实际采用的监听地址只有两个,即<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice和<em>net.tcp</em>://127.0.0.1:9999/calculatorservice。
ServiceHost( typeof (CacheService)); host.AddServiceEndpoint(typeof (ICacheService), new NetTcpBinding(), "net.tcp Client端: ChannelFactory NetcpFactory = new ChannelFactory(netTcpBindingBinding,new EndpointAddress("net.tcp WcfTcp绑的是保留地址: new ChannelFactory(netTcpBindingBinding, new EndpointAddress("net.tcp://192.168.0.115 CacheService/")); WcfTcp localhost绑的是127.0.0.1: new ChannelFactory(netTcpBindingBinding, new EndpointAddress("net.tcp
discoveryEndpoint" 8: isSystemEndpoint="false" /> 9: <endpoint address="<em>net.tcp</em> 其中一个地址为“<em>net.tcp</em>://127.0.0.1:8888/discoveryproxy/probe”,isSystemEndpoint属性被设置成False(这个设置是必需的)的DiscoveryEndpoint 另一个则是地址为“<em>net.tcp</em>://127.0.0.1:9999/discoveryproxy/announcement”的AnnouncementEndpoint终结点。 该终结点采用NetTcpBinding,而地址则是发现代理服务AnnouncementEndpoint终结点的地址“<em>net.tcp</em>://127.0.0.1:9999/discoveryproxy/announcement 为了让这个DynamicEndpoint终结点通过请求我们寄宿的发现代理服务进行了可用服务的探测,我们为它添加了一个采用NetTcpBindg的DiscoveryEndpoint终结点,该终结点的地址为“<em>net.tcp</em>
在IIS7.5下配置WCF的TCP绑定经常会遇到如下问题 找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注册的基址方案是 [http]。 behaviorConfiguration="WFServiceBehavior"> <host> <baseAddresses> <add baseAddress="<em>net.tcp</em>
在windows中,lls web服务器使用HTTP.sys中的Net.tcp Port Sharing服务,配合WinRM实现端口复用,可以实现正向后门 HTTP.sys HTTP.sys是Microsoft (2) Net.tcp Port Sharing Net.tcp Port Sharing服务是WCF(Windows Communication Foundation,微软的一个框架)中的一个新系统组件 ,这个服务会开启Net.tcp端口共享功能以达到在用户的不同进程之间实现端口共享。
service name="Artech.ThrottlingDemo.Service.CalculatorService"> 6: <endpoint address="<em>net.tcp</em> " binding="netTcpBinding" contract="Artech.ThrottlingDemo.Service.Interface.ICalculator" listenUri="<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice"/> 7: <endpoint address="<em>net.tcp</em>://127.0.0.1:8888 如果我们创建了基于服务类型CalculatorService的ServiceHost,并成功开启它,虽然该ServiceHost具有三个终结点,由于前两个共享相同的监听地址,所以实际采用的监听地址只有两个,即<em>net.tcp</em> ://127.0.0.1:8888/calculatorservice和<em>net.tcp</em>://127.0.0.1:9999/calculatorservice。
wifi.lua cfg={} cfg.ssid="Hellow8266" cfg.pwd="11223344" wifi.ap.config(cfg) TCPSever=net.createServer(net.TCP apcfg.ssid="qqqqq" apcfg.pwd="11223344" wifi.sta.config(apcfg) wifi.sta.connect() TCPSever=net.createServer(net.TCP apcfg.ssid="qqqqq" apcfg.pwd="11223344" wifi.sta.config(apcfg) wifi.sta.connect() TCPSever=net.createServer(net.TCP
[protocol='net.tcp',bindingInformation='808:*'] 站点绑定添加于修改也可以直接通过IIS管理器进行:选择相应站点=〉在右边的部分“Bindings”=〉在弹出的 通过下面的配置对默认站点下的WasHostingDemo应用添加了对net.tcp支持的能力。 appcmd.exe set app "Default Web Site/WasHostingDemo" /enabledProtocols:net.tcp 步骤三:创建客户端程序进行服务调用 对于调用非 2: <configuration> 3: <system.serviceModel> 4: <client> 5: <endpoint address="<em>net.tcp</em>
NetTcpBinding & ListenUriMode.Explicit--> 19: <endpoint address="<em>net.tcp</em>://127.0.0.1 NetTcpBinding & ListenUriMode.Unique--> 22: <endpoint address="net.tcp://127.0.0.1: NetTcpBinding & ListenUriMode.Unique & Port Sharing--> 26: <endpoint address="<em>net.tcp</em> ://127.0.0.1:7777/service3 4: 第4个终结点的监听地址为: <em>net.tcp</em>://127.0.0.1:1119/service4 5: 第5个终结点的监听地址为: <em>net.tcp</em>://127.0.0.1:9999/service5/b4f69288-913b-43ec-8e42-e58f150ee91c WCF后续之旅: WCF后续之旅(1): WCF是如何通过
--> 10: <item name="UpdateUrl" value="<em>net.tcp</em>://localhost:6607/eas/services/eas.updateservice" /> services> 32: <service name="EAS.RMI.Service" service-type="WcfService" singleton="true" url="<em>net.tcp</em> /> 33: <service name="EAS.Storage.Service" service-type="WcfService" singleton="true" url="<em>net.tcp</em> objects> 31: <services> 32: <service name="EAS.RMI.Service" service-type="WcfService" url="<em>net.tcp</em> <services> 2: <service name="EAS.RMI.Service" service-type="WcfService" singleton="true" url="<em>net.tcp</em>