应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

wcf net.tcp 双向通讯,以及发布iis问题

7298人阅读 2019/8/4 11:55 总访问:5179502 评论:0 收藏:0 手机
分类: WCF


一:新建wcf服务 UserCallBack.svc

  1.     [ServiceContract(CallbackContract = typeof(ICallback))]  //指定UserCallBack回调接口
  2.     public interface IUserCallBack
  3.     {
  4.         [OperationContract]
  5.         ReturnData<stringLogin(string username, string password);
  6.     }
  7.     public interface ICallback  //回调接口客服端实现
  8.     {
  9.         [OperationContract(IsOneWay = true)]//单向调用,不需要返回值
  10.         void LoginCallBack(string hello);
  11.         [OperationContract(IsOneWay = true)]//单向调用,不需要返回值
  12.         void Test(string hello);
  13.     }
  14.    
  15.     //实现IUserCallBack接口
  16.     public ReturnData<stringLogin(string username, string password)
  17.         {
  18.              DaoCommon.sesskv.Add(_sessionId, OperationContext.Current.GetCallbackChannel<ICallback>());//记录通道
  19.              ICallback callback = DaoCommon.sesskv[_sessionid];
  20.             Thread oThread = new Thread(delegate()
  21.            {
  22.                try
  23.                { callback.LoginCallBack("successful"); } //回调客服端方法
  24.                catch { }
  25.            });
  26.             oThread.Start();
  27.             OperationContext.Current.Channel.Closing += Channel_Closing;
  28.         }
  29.         void Channel_Closing(object sender, EventArgs e) 
  30.         {
  31.             Logout(sessionGlo);
  32.         }

二:配置 

  1.     <!--这里是添加的开始-->
  2.     <services>
  3.       
  4.       <service name="JSDService.Users.UserCallBack" >
  5.         <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBindConfig" contract="JSDService.Users.IUserCallBack"/>
  6.         <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
  7.       </service>
  8.     </services>
  9.     <extensions>
  10.       <bindingExtensions>
  11.         <add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex"/>
  12.       </bindingExtensions>
  13.     </extensions>
  14.     <!--这里是添加的结束-->
  15.     <bindings>
  16.       <netTcpBinding>
  17.         <!--超时时间-->
  18.         <binding name="netTcpBindConfig" receiveTimeout="00:20:00">
  19.           <security mode="None"/>
  20.         </binding>
  21.       </netTcpBinding>
  22.     </bindings>

三:发布到IIS

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

这是因为iis中没有配置对TCP的支持,安装iis支持tcp需要控制面板>程序和功能>打开和关闭windows功能,安装Non-Http支持

安装后,在启用WCF服务时出现错误“未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载 ”

   修改配置文件 %windir%/system32/inetsrv/config/applicationHost.config中 runtimeVersionv2.0" />

   在 Visual Studio 2010 命令提示符下运行下面的命令行: aspnet_regiis.exe -i -enable或者用系统命令行,打开位于下列地址的 %windir%/Microsoft.NET/Framework/v4.0.30319 中执行aspnet_regiis.exe -iru


打开IIS找到你的网站 绑定添加net.tcp  可以把绑定信息设置成4502:*

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


   错误: 10061服务器拒绝连接  

  这是因为有几个服务没有开启

  在控制面板中开打如下服务

 Net.Tcp Listener Adapter 与Net.Tcp Port Sharing Service


 TCP 错误代码 10013:

如果能在地址栏正确的访问了出现此问题就是没有加入跨域配置文件,需要注意的是比如我们的IIS目录指向chat.Web项目,浏览端口是809,我们的IIS里还有另一个网站使用80端口,这时,我们就要把跨域文件clientaccesspolicy.xml放到使用80端口的网站下,这是由于SilverLight会首先到80端口下检查跨域文件是否允许它访问。

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>

crossdomain.xml:

  1. <?xml version="1.0" ?>
  2. <cross-domain-policy>
  3.   <allow-access-from domain="*" />
  4. </cross-domain-policy>


错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收...

  一般是使用netTcpBinding时报错的

 修改下配置文件

 把netTcpBinding改成mexTcpBinding就可以了


四:siverlight客服端

只需添加引用服务,注册好回调事件就行

  1.   public MainPage()
  2.         {
  3.             InitializeComponent();
  4.             aa.Click += aa_Click;
  5.             mm = new UserCallBack.UserCallBackClient();
  6.             mm.LoginCompleted += mm_LoginCompleted;
  7.             mm.LoginCallBackReceived += mm_LoginCallBackReceived;
  8.             mm.RunALotteryCqReceived += mm_RunALotteryCqReceived;
  9.         }
  10.         void mm_RunALotteryCqReceived(object sender, UserCallBack.RunALotteryCqReceivedEventArgs e)
  11.         {
  12.             MessageBox.Show("开奖了!!");
  13.         }
  14.         void mm_LoginCallBackReceived(object sender, UserCallBack.LoginCallBackReceivedEventArgs e)
  15.         {
  16.             MessageBox.Show("登陆回调了");
  17.         }
  18.         void mm_LoginCompleted(object sender, UserCallBack.LoginCompletedEventArgs e)
  19.         {
  20.             MessageBox.Show("登陆了"+e.Result.Error);
  21.         }
  22.         private void sdf_Click(object sender, RoutedEventArgs e)
  23.         {
  24.             mm.LoginAsync(tb.Text,tb2.Text);
  25.         }

注意:在siverlight添加对net.ctp服务的引用时是用的计算机名+端口但是不在同个域内,需要dns,类似主机名这样才能找到对方

需要需要把计算机名改成ip,用wcftestclient测试他会报dns无法解析

 注意:添加引用的时候要使用tcp那个端口,比如上面绑定的4205

例如:net.tcp://ip:4502/SendFileWcf.svc



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

winform+wcf(netTcpBinding)双向通讯 自定义用户名密码验证

一:创建证书 使用vs的命令创建 makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=TestServer -sky exchange -p...

signalr入门双向通讯简单网页聊天

下载依赖:install-package Microsoft.AspNet.SignalR -version 2.0.3服务器启动类:usingMicrosoft.Owin; usingOwin; ...

css弹性盒子flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

可输入下拉文本框据输入动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

.net mvc分部页.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

css中单位pxemrem和vh/vw的理解

&gt;px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。em是相对长度单位。相对于当前对象内文本的字...

iis支持webp格式图片让iis支持vtt格式iis设置mime类型iis配置支持的类型

webp格式图片可以让图片体积变小。也让下载图片变得更加困难一点 在线制作webp工具 https://www.upyun.com/webp?utm_mediu...

网页上传文件断点续传的实现无视文件大小上传以及datatables基本用法

首先明白js是客户带执行代码,c#是服务器上执行代码。本地文件需要用到js处理,服务器端接受c#代码处理1.HTML页面,文件信...

如何使用图标像使用文字一样使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

使用七牛云的cdn服务提高图片的加载速度

CDN介绍CDN的全称是Content Delivery Network,即内容分发网络。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,...

通俗易懂什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

JS监听input、keydown有输入法时打字完成后触发事件

在给输入框绑定input或keydown事件时预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件可以用到c...

修改了css后让浏览器从缓存中更新

当我们修改了css后,如果不做一些操作,浏览器是不会自动更新我们的样式文件的。除非是过期或者用户手动刷新清理缓存等。所...

C MVC RedirectToAction跳转时候传递参数Action之间传值

MVC Action之间传值,页面跳转传值方法一:路由传值很简单直接使用 RedirectToAction(string actionName, string controller...