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

(由于最近是针对一个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,如需转载请自行联系原作者




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【空间数据库】空间数据库引擎(Spatial DataBase Engine)ArcSDE详解

一、空间数据库引擎概述 空间数据库引擎的概念最早由ESRI提出。ESRI对SDE的定义是:从空间数据管理的角度看,SDE是一个连续的空间数据模型,借助这一模型,我们可以将空间数据加人到关系数据库系统( RDBMS)中去。 SDE可以理解为基于特定的空间数据模型,在特定的数据存储、数…

Git之提示There is no tracking information for the current branch.

1 问题 我项目比如是0.2分支&#xff0c;我需要修改项目的git地址&#xff0c;然后再pull新的代码 1&#xff09;修改github地址&#xff08;读者可以忽略&#xff09; 1.git remote 查看所有远程仓库 2.git remote rm origin 删除之前的版本库 3.git remote add origin htt…

Maui学习之路(一)--Windows窗体设置

Maui的学习之路作为 Maui的先行者&#xff0c;我有话要说&#xff0c;微软你为了让我成为牛 B 的程序员真的是煞费苦心&#xff0c;你一定是觉得我不够牛逼所以针对我&#xff0c;存心想气死我。好了废话不多说&#xff0c;Maui现在也算是正式发布了&#xff0c;我有点想用它来…

Git 常用命令大全

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码&#xff0c;管理私人的文档和源代码也有很多优势。 Git常用操作命令&#xff1a; 1) 远程仓库相关命令 检出仓库&#xff1a;$ git clone git://github.com/jquery/jquery.git 查看远程仓库&#…

为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效?

2019独角兽企业重金招聘Python工程师标准>>> 为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效&#xff1f;新手学习js或jquery时&#xff0c;一般是在本地调试&#xff08;前端学习一般用不到服务器端&#xff09;&#xff0c;当学习到cookie一节时&…

全解小程序猜数字游戏 04《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 社区有奖励 下面有投票 本文也…

Android之解决主页面Activity监听fragment退出问题(由NavHostFragment和RxFragment一起管理fragment)

1、 问题 app里面目前主页面是一个activity,然后部分fragment是由NavHostFragment管理,当splash、login等页面也放在navigation时,按手机的返回键这些页面只能一页页回退,因为设置了 app:defaultNavHost="true" 并不能在某个页面例如splash、login按返回键时退…

linux之ps命令详解

linux中ps(process status) 命令是LINUX下最常用的也是非常强大的进程查看命令&#xff0c;运用该命令可以确定有哪些进程正在运行和运行地状态、进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等等。 ps命令最常用的是用于监控后台进程的工作情况。 Linux 查看进程p…

【空间数据库】传统数据模型(层次、网状、关系)和空间数据模型详解

数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表达方式,即把在计算机中表示客观事物及其联系的数据及结构称为数据模型。本文详细讲述传统三大数据模型和空间数据模型。 一、数据模型概述 数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表…

聊聊 C# 中的多态底层 (虚方法调用) 是怎么玩的

最近在看 C 的虚方法调用实现原理&#xff0c;大概就是说在 class 的首位置存放着一个指向 vtable array 指针数组 的指针&#xff0c;而 vtable array 中的每一个指针元素指向的就是各自的 虚方法&#xff0c;实现方式很有意思&#xff0c;哈哈&#xff0c;现在我很好奇 C# 中…

sublime text 3 安装、添加命令行启动、汉化、注册码

1. 安装sublime&#xff1a; 下载&#xff1a;http://www.sublimetext.com/3 添加命令行启动&#xff1a;设置环境变量->计算机->右键属性->高级系统设置->环境变量->系统变量->Path->编辑&#xff0c;加入";安装路径"(如&#xff1a;;D:\Progr…

MVC基础知识-View

public ActionResult Index() {ViewBag.Message "Modify this template to jump-start your ASP.NET MVC application.";//展现到视图中数据//~/Views/Home/Index.cshtmlreturn View(); //展现指定的视图&#xff0c;当没有指定视图名称时&#xff0c;默认是指向根目…

Android之设置当前app为默认浏览器研究

1 需求 把当前app设置为默认浏览器 2 主要思路 分析竞品,我们主要通过2种方式设置app为默认浏览器 直接跳 手机“设置默认应用”界面来让用户选择 默认浏览器为哪个app打开一个链接,拉起手机所有浏览器,让用户去选择哪个浏览器,并且只有点击“始终”才会生效,仅仅点击“…

Linux下的用户和组

2019独角兽企业重金招聘Python工程师标准>>> 用户和组 GNU/Linux 通过用户和用户组实现访问控制 —— 包括对文件访问、设备使用的控制。Linux 默认的访问控制机制相对简单直接&#xff0c;不过还有一些更加高级的机制&#xff0c;包括 ACL 和 LDAP Authentication.…

漫画C语言 做个聊天软件你不懂也得懂

学完C语言做不出东西&#xff1f;不存在的&#xff0c;咱们做一个最“隐私”的聊天器&#xff0c;就俩人&#xff0c;你和我。咱们聊天的信息你知我知没别人知。 对了&#xff0c;本文评论区点赞、收藏抽奖。 社区也有抽奖&#xff0c;本周社区抽奖帖子 &#xff1a;https://b…

【Microstation】第一章:Microstation三维模型构建概述

MicroStation 是国际上和AutoCAD齐名的二维和三维CAD设计软件&#xff0c;第一个版本由Bentley兄弟在1986年开发完成。其专用格式是DGN&#xff0c;并兼容AutoCAD的DWG/DXF等格式。 MicroStation是Bentley 工程软件系统有限公司在建筑、土木工程、交通运输、加工工厂、离散制造…

libgdx游戏引擎开发笔记(十)SuperJumper游戏例子的讲解(篇四)---- 主游戏界面内部框架编写...

上一讲&#xff0c;我们已经实现了点击play进入游戏界面但仅仅是个黑屏 今天&#xff0c;我们就试着编写代码让它出现游戏的一些简单场景。还是在上一讲的代码基础上&#xff0c;我们创建两个类&#xff1a;World 和 WorldRenderer 1.Word类&#xff1a; 12345678910111213141…

看看《System.CommandLine》

记得之前出过几篇.net tool工具的文章&#xff0c;当时的做法是所有工具的语法分析全部自己解释&#xff0c;自己执行&#xff0c;语法的解释占了大部分时间&#xff0c;反而工具的功能被弱化了。其实微软有一个CommandLine框架在缓慢的发展着&#xff0c;至今都没有正式发布&a…

Sublime Text 3 import Anaconda 无法正常补全模块名解决办法

Sublime Text 3 Anaconda配置 在安装Sublime Text3之后我们总会安装一些插件&#xff0c;比如Python的Anaconda自动补全插件。但是&#xff0c;装好之后发现import 时无法像别的IDE里面那样自动补全模块名&#xff0c;就像图中一样&#xff1a; 解决办法在Sublime Text的git…

hdu - 2586 How far away ?(最短路共同祖先问题)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2586 最近公共祖先问题~~LAC离散算法 题目大意&#xff1a;一个村子里有n个房子&#xff0c;这n个房子用n-1条路连接起来&#xff0c;接下了有m次询问&#xff0c;每次询问两个房子a,b之间的距离是多少。 很明显…