打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
教程 如何在silverlight下进行net.tcp通信操作配置

教程--如何在silverlight下进行net.tcp通信操作配置,包管用!

前言

  最近接一个SL项目,由于SL本身是一个基于.net framework 但是又独立于.net framework的内核,它有诸多局限性并没有.net framework如此强大,例如那些经常做WinForm开发的猿猿们肯定很难受,熟悉的DataTable没了,熟悉的IAsyncResult接口没了,憋啊~。因此在SL环境中WCF 通信就变得很重要了。注意,也许你已接触了WCF RIA Service 但是本次我们不讨论这个,这个多少数基于SQL SERVER + EF4 来做,有兴趣的可以去园子里找相关博文,一大把。

  由于WCF是一个很大的主题,同时本文不是讲解WCF的,所以在读本文时需要您有一定的WCF基础,没有的就去拜读一下Artech大佬的WCF系列文章吧。同时要注意了,目前只有SL4以上的版本支持NET.TCP协议,所以请注意您当前的SL版本。

建立项目

  打开您的VS2010

    1.建立一个空白解决方案

    2.建立一个WCF Service Application 服务

    3.建立一个SL客户端,注意建立的时候千万不要勾选Enable RIA Service

    4.建立好后顺手Build一下的您解决方案吧

    例如下图

    

配置服务

    为了更直接的说明如何配置,这里我们就不重新设计服务了,就用项目建立默认的IService1吧,那么我们接下来讲讲如何配置服务的。

    1.首先打开的你的一些功能服务,本人用的是WIN7,因此需要在控制面板->程序->打开或关闭Windows功能里找到如下选项

    

    选中后点击确定,完成后你会做服务里找到如下一些已启动的服务,如图

    

    2.完成如上配置后,那么下一步我们是修改解决方案里服务端依赖的IIS,由VS字段的IIS改为本机的IIS。

    右键SLNettcpDemo.Server->属性->Web->User Local IIS Web Server 如图

    注意 记得点击按钮“Create Virtual Directory”他将在你本机的IIS默认网站下建立一个虚拟目录。

    添加虚拟目录后,接下来我们配置一下本机的IIS,让IIS支持net.tcp通信。

    打开IIS,找到本机IIS的默认站点,并选择编辑绑定,结果如图

    

    完成上述步骤后,我们需要让您的虚拟目录对net.tcp协议支持,因此,这时选中刚才建立的虚拟目录,并编辑虚拟目录的高级设置,添加对net.tcp的支持。如下图

    

    那么在最后我们要在默认站点下放置如下文件clientaccesspolicy.xml,这是一个配置策略文件,告诉IIS如何处理net.tcp协议,切记这个文件命名必须如此,MS明确说的,不要重命名哦。如图

    

    接下来,我们回到项目SLNettcpDemo.Server,编辑Web.config文件,例如

<?xml version="1.0"?><configuration>  <system.web>    <compilation debug="true" targetFramework="4.0" />  </system.web>  <system.serviceModel>    <services>      <service name="SLNettcpDemo.Server.Service1" behaviorConfiguration="behavior1">        <endpoint address="Service1" contract="SLNettcpDemo.Server.IService1" binding="netTcpBinding" bindingConfiguration="tcpConfig" />        <endpoint contract="IMetadataExchange" binding="mexTcpBinding" address="mex" />        <host>          <baseAddresses>            <add baseAddress="http://localhost/SLNettcpDemo.Server/" />            <add baseAddress="net.tcp://localhost:4502/SLNettcpDemo.Server/" />          </baseAddresses>        </host>      </service>    </services>    <bindings>      <netTcpBinding>        <binding name="tcpConfig"                 portSharingEnabled="true"                 closeTimeout="00:20:00"                 receiveTimeout="00:20:00"                 maxBufferPoolSize="2147483647"                 maxReceivedMessageSize="2147483647">          <security mode="None" />        </binding>      </netTcpBinding>    </bindings>    <behaviors>      <serviceBehaviors>        <behavior name="behavior1">          <serviceMetadata httpGetEnabled="true" />          <serviceDebug includeExceptionDetailInFaults="true" />          <serviceTimeouts transactionTimeout="00:10:00"/>        </behavior>      </serviceBehaviors>    </behaviors>    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />  </system.serviceModel> <system.webServer>    <modules runAllManagedModulesForAllRequests="true"/>  </system.webServer>  </configuration>

 

    配置完毕后,这时我们就要验证一下我们的服务是否可以正常使用,右键Service1.svc文件,选择在浏览器浏览,当看到如下截图时,说明你的服务端配置已经完成了。恭喜恭喜!

    

配置客户端

    当完成服务端配置是,这时配置客户端就简单很多了,右键项目SLNettcpDemo.SLClient,添加Web Service 服务引用,如下图,注意引用地址

    

    点击OK后,项目SLNettcpDemo.SLClient的目录会发生一些变化,如下图:

    

    ClientConfig这个文件很重要,我们看看它有哪些内容

<configuration>    <system.serviceModel>        <bindings>            <customBinding>                <binding name="NetTcpBinding_IService1">                    <binaryMessageEncoding />                    <tcpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />                </binding>            </customBinding>        </bindings>        <client>            <endpoint address="net.tcp://localhost:4502/SLNettcpDemo.Server/Service1.svc/Service1"                binding="customBinding" bindingConfiguration="NetTcpBinding_IService1"                contract="Service1.IService1" name="NetTcpBinding_IService1" />        </client>    </system.serviceModel></configuration>

 

    那么这个时候我们进行一些简单的编码了,打开MainPage.xaml.cs进行编辑,如下:

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using SLNettcpDemo.SLClient.Service1;namespace SLNettcpDemo.SLClient{    public partial class MainPage : UserControl    {        public MainPage()        {            InitializeComponent();            Loaded += new RoutedEventHandler(MainPage_Loaded);        }        void MainPage_Loaded(object sender, RoutedEventArgs e)        {            var svcClient = new Service1Client();            svcClient.GetDataCompleted += (obj, arg) => {                if (arg != null && arg.Result != null) {                    MessageBox.Show(arg.Result);                }            };            svcClient.GetDataAsync(123);        }    }}

 

    编辑完毕,安下F5,一切大功告成。

    

 

注意事项

  1.本地默认站点对应的线程池必须是.net framework 4的,因此当你的站点还没有支持.net framework 4时,请重新向IIS注册一下.net framework 4,具体怎么注册网站搜罗吧,很多教程。

      2.部署的时候,无论是在客户端配置还是服务端的配置都需要把localhost替换成真实的地址,因此保险的做法就是在vs里进行整个解决方案整体替换。

      3.在客户端所有的服务引用操作都是异步的,所以要注意了。

      4.这样做的方法是便于熟悉日后部署,但是要调试服务端的代码话非常不方便,几乎为零。因此有一些解决方案:

           a.自己动手写服务端的单元测试。

           b.这里有一篇帖子,服务端是做成控制台程序。感兴趣的可以瞅瞅哦。

      5.由于NETTCP需要iis7的支持,因此开发环境是xp/win2003的朋友,建议还是不要折腾了,貌似很麻烦的说。

      6.net.tcp 在IIS上支持的端口很少,貌似是4502-4530之间,请注意这点哦。

总结

  nettcp 在互联网中应用不太适合,相对要是在局域网里,尤其是企业级开发,它极为适合,SL4对nettcp的支持,对SL的访问数据效率相对原来的http协议有着极大的提高,同时在WCF通信双工方面也有着很好的支持,因此感兴趣的朋友不妨动手玩玩。

     最后请允许我厚着脸皮王婆卖瓜自卖自夸一下,如果您觉得这篇文章有用的话,麻烦您高抬贵手点击推荐一下吧。谢谢(*^__^*) ……

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
安装问题疑难解答
IIS7中注册wcf .
ASP.NET在IIS上注册--0x800702e4错误解决
iis增加上传大小
WCF基础(转)
WCF: Host、Client、MetadataExchage
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服