silverlight与wcf双向通讯 例子

时间:2022-10-13 10:21:49

本文将建立一个silverlight与wcf双向通讯的简单实例,以下是详细步骤:


  新建Silverlight应用程序,名称WCFtest。解决方案中添加WCF服务应用程序,名称WcfServiceTest,WCF服务将不再寄宿在Web中。

silverlight与wcf双向通讯 例子


  删除VS自动生成的IService1.cs和Service1.svc文件,修改WCF服务固定端口12345。

silverlight与wcf双向通讯 例子

silverlight与wcf双向通讯 例子


  在WCF服务应用程序WcfServiceTest上,添加应用,选择浏览定位到 C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Server \System.ServiceModel.PollingDuplex.dll,PollingDuplex是一种扩展的双工轮询通讯方法,在安装的 Silverlight SDK中可以找到。

silverlight与wcf双向通讯 例子


    添加一个WCF服务,名称ServiceTest。

silverlight与wcf双向通讯 例子

修改WCF服务应用程序WcfServiceTest的Web.config文件。

silverlight与wcf双向通讯 例子
<?xml version="1.0" encoding="utf-8"?>
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<!--这里是添加的开始-->
<services>
<service name="WcfServiceTest.ServiceTest" >
<endpoint address="" binding="pollingDuplexHttpBinding" contract="WcfServiceTest.IServiceTest" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<extensions>
<bindingExtensions>
<add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</bindingExtensions>
</extensions>
<!--这里是添加的结束-->
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer> </configuration>
silverlight与wcf双向通讯 例子

此处的修改,添加了两个终结点,使用服务配置编辑器打开可以看到它们

silverlight与wcf双向通讯 例子

silverlight与wcf双向通讯 例子


服务配置编辑器,可以在开始菜单中找到

silverlight与wcf双向通讯 例子

右键点击其属性,复制其目标地址

silverlight与wcf双向通讯 例子

右键Wcf服务应用程序中的Web.config文件,选择打开方式,点击添加,程序名输入"服务配置编辑器的路径",友好名称"服务配置编辑器"

silverlight与wcf双向通讯 例子

选择Web.config文件的打开方式,就可以选择服务配置编辑器打开了;


  修改IServiceTest.cs文件。

silverlight与wcf双向通讯 例子
    [ServiceContract(CallbackContract = typeof(ICallBack))]//指定回调接口ICallBack
public interface IServiceTest
{
[OperationContract(IsOneWay = true)]//单向调用,不需要返回值
void SayHellow(string name);
} public interface ICallBack
{
[OperationContract(IsOneWay = true)]//单向调用,不需要返回值
void ShowHello(string hello);
}
silverlight与wcf双向通讯 例子

CallbackContract=typeof(ICallBack),指定了回调接口;

(IsOneWay = true),单向调用,不需要返回值。

  修改ServiceTest.svc.cs文件,实现IService接口的SayHello方法,传进name参数,处理为My name is [name],作为参数再调用指定的回调接口ICallBack中的ShowHello方法,ICallBack中的所有方法则留给客户端实现,这里不需 要实现它。

silverlight与wcf双向通讯 例子
    public class ServiceTest : IServiceTest
{
#region IServiceTest 成员 public void SayHellow(string name)
{
name = string.Format("My name is {0}.", name);
ICallBack callBack = OperationContext.Current.GetCallbackChannel<ICallBack>();
callBack.ShowHello(name);
} #endregion
}
silverlight与wcf双向通讯 例子

当客户端调用服务端的SayHellow方法时,服务端收到调用,获取客户端实例的通道。

silverlight与wcf双向通讯 例子

按照约定好的回调接口,调用ShowHello方法,同时把参数传递过去,ICallBack中的方法留给客户端实现,服务端这里只管调用。


  你可能会遇到跨域问题,解决方法是为WCF应用程序WcfServiceTest添加跨域文件clientaccesspolicy.xml。

silverlight与wcf双向通讯 例子

clientaccesspolicy.xml内容如下:

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

  重新生成解决方案,否则可能会遇到发现wcf服务有误的情况,为Silverlight项目添加服务引用,点击发现可以查找到刚刚添加的ServiceTest服务,修改命名空间ServiceReferenceTest。

silverlight与wcf双向通讯 例子

silverlight与wcf双向通讯 例子


  在Silverlight项目的MainPage.xaml上,为了便于演示,添加一个TextBox,一个Button,一个TextBlock。

silverlight与wcf双向通讯 例子
    <Grid x:Name="LayoutRoot" Background="White">
<TextBox Height="" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="" />
<Button Content="Button" Height="" HorizontalAlignment="Left" Margin="12,41,0,0" Name="button1" VerticalAlignment="Top" Width="" />
<TextBlock Height="" HorizontalAlignment="Left" Margin="12,70,0,0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" Width="" />
</Grid>
silverlight与wcf双向通讯 例子

  添加button1的点击Click事件。

silverlight与wcf双向通讯 例子
        private void button1_Click(object sender, RoutedEventArgs e)
{
//扩展的轮询机制的双向通讯
PollingDuplexHttpBinding binding = new PollingDuplexHttpBinding()
{
//每次轮询建立的有效时间为20分钟
InactivityTimeout = TimeSpan.FromMinutes()
};
//基础的http请求方式
//Binding binding =new BasicHttpBinding();
//svc服务地址
EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/ServiceTest.svc");
ServiceReferenceTest.ServiceTestClient client = new ServiceReferenceTest.ServiceTestClient(binding, endPoint);
//异步调用SayHellow方法
client.SayHellowAsync(this.textBox1.Text);
//调用完成后ShowHello回调事件
client.ShowHelloReceived += new EventHandler<ServiceReferenceTest.ShowHelloReceivedEventArgs>(client_ShowHelloReceived);
}
silverlight与wcf双向通讯 例子

new PollingDuplexHttpBinding();实例化一个PollingDuplex通道,PollingDuplex为双向工作轮询通信机制;

InactivityTimeout = TimeSpan.FromMinutes(20);每次轮询建立的有效时间为20分钟;

new EndpointAddress("http://localhost:12345/ServiceTest.svc");指定svc服务的终结点地址;

client.SayHellowAsync(this.textBox1.Text);将textBox1的text内容作为参数,异步调用服务端的SayHellow方法;

client.ShowHelloReceived += new EventHandler<ServiceReferenceTest.ShowHelloReceivedEventArgs> (client_ShowHelloReceived);调用服务端的SayHellow方法,方法将调用回调接口ICallBack中的 ShowHello方法,这里指定ShowHello调用完成的事件;

        void client_ShowHelloReceived(object sender, ServiceReferenceTest.ShowHelloReceivedEventArgs e)
{
//实现void ShowHello(string hello)方法,参数e.hello
this.textBlock1.Text = string.Format("Hello! {0}", e.hello);
}

这里就是对ICallBack接口中ShowHello方法的实现,可使用参数e.hello,当客户端调用服务端的SayHello方法 时,SayHello方法中调用指定的回调接口ICallBack中的ShowHello方法,客户端完善调用到ShowHello方法完成后的事件,显 示结果Hello![e.hello],在textBlock1上;


  F5运行,在textbox1中输入名字name,点击button1,调用服务端的SayHello方法带参数name,SayHello方 法处理为Mynameis[name],作为参数再调用指定的回调接口ICallBack中的ShowHello方法,客户端实现调用ShowHello 方法完成后的事件, 处理为Hello![e.hello],后输出结果到textBlock1中。

silverlight与wcf双向通讯 例子

silverlight与wcf双向通讯 例子的更多相关文章

  1. WCF 双向通讯实例-简易的聊天程序

    源码下载 程序分四个部分: 1.原理 使用WCF的nettcp绑定.nettcp绑定类似原来的RPC,即.net remoting,只是在WCF提供统一协定,同一服务可以拥有多种客户端. 2.代码展示 ...

  2. 系列文章--Silverlight与WCF通信

    Silverlight与WCF通信(一) :Silverlight通过httpBinding访问IIS宿主WCF 摘要: 首语本人在学习Silverlight 和 WCF的时候,各种问题层出不穷,在园 ...

  3. 重温WCF之数单向通讯、双向通讯、回调操作(五)

    一.单向通讯单向操作不等同于异步操作,单向操作只是在发出调用的瞬间阻塞客户端,但如果发出多个单向调用,WCF会将请求调用放入到服务器端的队列中,并在某个时间进行执行.队列的存储个数有限,一旦发出的调用 ...

  4. 我们一起学习WCF 第四篇单通讯和双向通讯

    前言:由于个人原因很久没有更新这个系列了,我会继续的更新这系列的文章.这一章是单向和双向通讯.所谓的单向就是只有发送却没有回复,双向是既有发送还有回复.就是有来无往代表单向,礼尚往来表示双向.下面我用 ...

  5. 三十、【C&num;&period;Net开发框架】WCFHosting服务主机的利用WCF服务通讯和实现思路

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  6. SilverLight搭建WCF聊天室详细过程&lbrack;转&rsqb;

    http://www.silverlightchina.net/html/zhuantixilie/getstart/2011/0424/7148.html 默认节点 SilverLight搭建WCF ...

  7. C&plus;&plus;的MFC 与 HTML 双向通讯

    C++中嵌入ie浏览器总结(1) - ie边框 及上下文菜单 最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已 ...

  8. Silverlight调用一般性处理程序模拟Silverlight调用WCF效果(2)

    [置顶] Silverlight调用一般性处理程序模拟Silverlight调用WCF效果(2) 分类: 技术2012-03-31 12:51 548人阅读 评论(0) 收藏 举报 silverlig ...

  9. Silverlight调用WCF(1)

    [置顶] Silverlight调用WCF(1) 分类: 技术2012-03-31 12:29 940人阅读 评论(0) 收藏 举报 wcfsilverlightexceptionusersecuri ...

随机推荐

  1. Repeater的分页

      Repeater控件是个好东西.轻量级.又好用.完全的自定义.但是,正是因为这些优点它没有自动分页的功能.这个需要研究一下.我看了一下起点等小说网站,那些什么推荐排名榜用Repeater控件那是很 ...

  2. Centos6&period;5下安装protobuf及简单使用

    1.protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2.下载最新的protobuf,下载地址:https ...

  3. android之AlertDialog 点击其他区域自动消失

    遇到一个问题记录下来,在开发中使用了AlertDialog,想点击屏幕其他区域的时候让这个dialog消失,一开始不做任何设置,在小米手机可以正常显示,但是在三星中却有问题,后来发现少了一个属性: V ...

  4. 关于php读mysql数据库时出现乱码的解决方法

    关于php读mysql数据库时出现乱码的解决方法 php读mysql时,有以下几个地方涉及到了字符集. 1.建立数据库表时指定数据库表的字符集.例如 create table tablename ( ...

  5. 给Angularjs配上Requirejs

    给Angularjs配上Requirejs 需要考虑的事情: 1.js.css.template都按需加载,js主要就controller: * js和css都可以用requirejs和它的插件解决, ...

  6. 一个经典的js中关于块级作用域和声明提升的问题

    function functions(flag) { if (flag) { function getValue() { return 'a'; } } else { function getValu ...

  7. Azure Powershell使用已有Image创建ARM非托管磁盘虚拟机

    生成Image映像文件,记录好Image的URL(下面URL为测试URL,具体请参考实际):ImageURL:https://hlmrgstoragen.blob.core.chinacloudapi ...

  8. parse&lowbar;str&lpar;&rpar; 函数把查询字符串解析到变量中。

    定义和用法 parse_str() 函数把查询字符串解析到变量中. 注释:如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量. 注释:php.ini 文件中的 magic_quo ...

  9. 我的Python之旅第四天

    一 名称空间.作用域.取值顺序 1 名称空间 当程序运行时,代码从上至下依次执行,它会将变量与值得关系存储在一个空间中,这个空间就叫做名称空间,也叫命名空间.全局名称空间. 当程序遇到函数时,他会将函 ...

  10. text&sol;css什麼意思

    text/css用在style的type屬性中,表示style的標簽里的文本內容要當做層疊樣式表(css)來解析,放在html的頁面內部,是HTML的內部樣式表: text/html用在style的t ...