(由于最近是针对一个demo进行的研究,在之前公开过代码结构,这里只是对需要改动的地方加以说明)

WCF4.0使得编写wcf服务不再那么复杂,去掉了许多的配置信息,客户端只需要一个服务地址,便可在系统生成的代理类下做开发了,在部署时也只需要更改引用配置文件的地址即可。但是今天我尝试silverlight以net.tcp方式连接host到console上的wcf服务时,却颇费周折,一个wcf console server 和一个console client 之间的通信很简单,不需要任何配置,但是silverlight如果想引用这个服务,则必须为服务定义元数据才能供silverlight生成代理类,如果直接用之前的服务,会产生错误。

WCF服务端配置

这个是简单的服务,没有任何配置,本次我是想完全由配置文件来解决信息公开的问题,所以服务端实际上很简单

host = new ServiceHost(typeof(ChatService));  
      host.Open(); 
在silverlight引用时会出现找不到元数据的情况,原因是没有公开服务的描述信息,没有元数据无法让外界知道服务的信息,所以经过反复的试验后终于能够正常访问到服务,配置文件有两种情况:

1,如果没有配置基地址,则终结点的地址采用全地址

代码

<system.serviceModel> 
    <services> 
      <service behaviorConfiguration="Server.ChatServiceBehavior" name="Server.ChatService"> 
        <endpoint address="net.tcp://localhost:4503/ChatService" binding="netTcpBinding" contract="Server.IChatService"></endpoint> 
        <endpoint address="net.tcp://localhost:4503/ChatService/mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>        
      </service>     
    </services> 
    <behaviors> 
      <serviceBehaviors> 
        <behavior name="Server.ChatServiceBehavior"> 
          <serviceMetadata httpGetEnabled="false"/> 
          <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
      </serviceBehaviors> 
    </behaviors> 

2,如果配置了基地址,则终结点的地址采用相对地址

代码

<system.serviceModel> 
    <services> 
      <service behaviorConfiguration="Server.ChatServiceBehavior" name="Server.ChatService"> 
        <endpoint address="" binding="netTcpBinding" contract="Server.IChatService"></endpoint> 
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint> 
        <host> 
          <baseAddresses> 
            <add baseAddress="net.tcp://localhost:4503/ChatService/"/> 
          </baseAddresses> 
        </host> 
      </service> 
    </services> 

3,其实,也可以通过HTTP获得元数据,如下配置即可

<endpoint address="http://localhost:4503/ChatService/mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint> 

4,一定要注意安全配置这里设置一下,否则默认会有局域网的账户验证什么的。

<bindings> 
      <netTcpBinding> 
        <binding name="netTcpBindConfig"> 
          <security mode="None"/> 
        </binding> 
      </netTcpBinding> 
    </bindings>

5,行为配置

代码

    <behaviors> 
      <serviceBehaviors> 
        <behavior name="Server.ChatServiceBehavior"> 
          <serviceMetadata /> 
          <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
      </serviceBehaviors> 
    </behaviors> 
  </system.serviceModel>

到这里,服务已经通过net.tcp方式建立起来了,静候silverlight客户端的调用了。

silverlight调用

silverlight以tcp方式访问服务器时,只能够访问固定的端口,需要一个策略文件验证,我们只需要将这个策略文件放到IIS下即可。

代码

void MainPage_Loaded(object sender, RoutedEventArgs e) 
        { 
            ChatService.ChatServiceClient proxy = new ChatService.ChatServiceClient(); 
            proxy.SendMessageCompleted += (o,ev) => { 
                string str = string.Empty; 
                if (ev.Error == null) 
                { 
                    str = "发送成功"; 
                } 
                else 
                { 
                    str = "发送失败"; 
                } 
                MessageBox.Show(str); 
            }; 
            proxy.SendMessageAsync(new ChatService.MessageInfo() { Message="hello,leon", UserName="mac", PartnerName="leon"}); 
        }

注意,一定要将策略文件放到IIS下面。

本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/587227,如需转载请自行联系原作者

Silverlight与WCF之间的通信(4)silverlight以net.tcp方式调用console上寄宿的wcf服务相关推荐

  1. Silverlight与WCF之间的通信(5)silverlight应用和wcf服务的发布方法

    上一篇博文中有朋友问到关于silverlight程序发布的问题,上一篇写的是silverlight访问host在console上的wcf,其实关于wcf和silverlihgt通信的问题有好几种方式, ...

  2. Silverlight 应用程序之间在客户端通信

    运行在同一台电脑上的多个 Silverlight 应用程序可以通过本地消息进行通信,通信是在客户端进行的,不需要与服务端交互.使用这一功能可以使在同一页面承载的多个 Silverlight 应用程序之 ...

  3. 【转】利用WCF的双工通信

    Silverlight与WCF之间的通信(2)利用WCF的双工通信"推送"给SL数据 作者:Leon Weng  来源:博客园  发布时间:2010-06-19 23:43  阅读 ...

  4. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  5. 如何解决服务之间的通信问题?

    文章目录 1.如何解决服务之间的通信问题? 2.如何在java代码中发起http方式请求? 3.实现服务间通信的小案例 3.1 使用两个测试服务 用户服务users和订单服务orders 3.2 用户 ...

  6. 如何在基于 Silverlight 的本地应用程序之间实现通信

    http://msdn.microsoft.com/zh-cn/library/dd833075(VS.95).aspx 在两个Silverlight应用间数据通信(包括与Flash通信) 如何在基于 ...

  7. 一步一步学Silverlight 2系列(23):Silverlight与HTML混合之无窗口模式

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 写在Silverlight 5发布前 - 盘点2010年Silverlight开发书籍

    距MIX11还有一个月,Silverlight 5即将到来(了解Silverlight 5新特性),为了方便大家学习Silverlight开发技术,本文汇总了2010年较为流行的Silverlight ...

  9. Silverlight C# 游戏开发:游戏循环体的五种设计方式

    我们在游戏设计和开发中,尤其是引擎开发中,逻辑循环是一个重要组成部分,循环决定了游戏的基础逻辑和运行方式,在不同的开发环境和语言下,对于循环的释义甚至相差甚远,那么我想和大家分享的是在Silverli ...

最新文章

  1. 【工具】TFT彩屏图片点阵取模工具,Img2Lcd图片取模软件,图片生成c语言头文件...
  2. TikTok信息流广告怎么做才有效果?我从100个营销短视频中总结了这些方法
  3. Deeplearnng.AI第四部分第一周、卷积神经网络
  4. 一元多项式的建立及加减
  5. python试卷河南理工大学万方科技学院_河南理工大学万方科技学院
  6. 内置对象和自定义对象的原型链
  7. Windows下C语言网络编程快速入门
  8. 前端开发知识点解答-问题-面试问题
  9. 多元正态分布、多元t分布中的行列式求解 Java
  10. php生成红包数组,PHP 生成微信红包代码简单
  11. 3D打印策略:检验CIO领导力的试金石
  12. Integrity Pro for mac(网站死链接清理)
  13. CSS 命名 BEM 。线上样式不对。已经更新。El-input__suffix偏上。字体样式 苹方-简 PingFangSC-Regular。echarts字体。
  14. 40篇英语短文搞定高考3500个单词
  15. 20211高考成绩查询,青岛理工大学教务系统URP成绩查询、网上选课查分 http://211.64.192.21/,精英高考网...
  16. 进击的马云,失落的码农
  17. 分布式-分布式常见问题和解决方案
  18. 周鸿祎自称3次破解特斯拉云端系统:安全隐患巨大
  19. 中国制霸生成器火了/ 马斯克香水被炒至原价10倍/ 闽南话翻英语算法来了… 今日更多新鲜事在此...
  20. Modelsim添加altera仿真库

热门文章

  1. 拓展视野学习前端,我推荐这些
  2. 云栖大会上,阿里巴巴重磅发布前端知识图谱!
  3. React Native - FlexBox弹性盒模型
  4. angularJs select绑定的model 取不到值
  5. memcache的学习路线图
  6. Virtualbox安装增强工具失败
  7. Tiny模板语言(VelocityPlus)初步入门
  8. 33条C#、.Net经典面试题目及答案[zt]
  9. Windows CE的电源管理之三
  10. 数学在计算机科学上的应用文献,浅谈数学在计算机科学及应用中的作用