[ServiceContract]
    public interface IContractDemoOne
    {
        [OperationContract(IsOneWay=true)]//单工通信:向服务器发信息,没有返回信息:一般只能void且没有out才能使用,像有返回值,update时不能使用。
                                          //优点就是快,不用等待,客户端可以进行其它的操作
                                          //最大的缺点:不知道有没有成功。
        string GetDataTable();

[OperationContract]//默认:请求/响应模式
        void InsertIntoDataToTable();
    }

双工模式

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IServiceDuplexCallBack))]
    public interface IDoubleContractModel
    {
        [OperationContract(IsOneWay=true)]//双工模式:客户端可以向服务端发送信息,同时服务器也可以发送信息到客户端.
        void AddNumber();
    }
    public interface IServiceDuplexCallBack
    {
        [OperationContract(IsOneWay=true)]
        void Calculate(double result);
    }

demo1

两接口类

  //指定会话模式:必需的,另一个指向回调后的契约(接口)
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IServiceDuplexCallBack))]
public interface IService1
{
[OperationContract(IsOneWay = true)]
void AddNumber(int value, int value1); [OperationContract(IsOneWay = true)]
void SubstractNumber(int x, int y);
} public interface IServiceDuplexCallBack//回调契约
{
[OperationContract(IsOneWay = true)]
void Calculate(int result);
}

实现服务端接口类

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]//指定行为模式,为每个会话开启一个新的对象
public class Service1 : IService1
{
IServiceDuplexCallBack callback//声明回调对象
{
get
{
return
OperationContext.Current.GetCallbackChannel<IServiceDuplexCallBack>();//
}
} public void AddNumber(int value, int value1)
{
int z = value + value1;
callback.Calculate(z);//通过回调对象把结果发回到客户端
} public void SubstractNumber(int x, int y)
{
int z = x - y;
callback.Calculate(z);//通过回调对象把结果发回到客户端
}

配置文件

 <system.serviceModel>
<services>
<service name="HCC.WCF.Double.Model.Service1">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8732/Design_Time_Addresses/HCC.WCF.Double.Model/Service1/" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
<endpoint address ="" binding="wsDualHttpBinding" contract="HCC.WCF.Double.Model.IService1">
<!--
部署时,应删除或替换下列标识元素,以反映
用来运行所部署服务的标识。删除之后,WCF 将
自动推断相应标识。
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
<!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

前台代码:必须实现一个回调接口

 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 双工通信
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
InstanceContext ic=new InstanceContext(new CallBackHandler());
WCF.DoubleModel.Service1Client _client = new WCF.DoubleModel.Service1Client(ic);
_client.AddNumber(, );
_client.Close();
}
} public class CallBackHandler : WCF.DoubleModel.IService1Callback//前台实现回调接口
{
public void Calculate(int result)
{
MessageBox.Show(result.ToString());
}
}

WCF的通信的更多相关文章

  1. WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  2. 无废话WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  3. 【转】WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  4. WCF入门四[WCF的通信模式]

    一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...

  5. 【.net 深呼吸】记录WCF的通信消息

    前面老周给大伙伴们介绍了把跟踪信息写入日志文件的方法,今天咱们换个类似的话题来扯一下,对了,咱们就说说怎么把WCF的往来消息log下来吧. 尽管在现实生活中,我们不主张偷窥他人信息,不过,偷窥程序信息 ...

  6. Wcf 双工通信的应用

    概述 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工ME ...

  7. WCF 双工通信

    注释:本学习是参考Artech大神的资料: 在WCF 实现双工通信 在这里我就不介绍双工通信的概念了,我写博客的目的是检测自己掌握情况,看我wcf通信后,觉得纸上得来终觉浅,绝知此事要躬行. 我使用的 ...

  8. WCF双工通信单工通信

    1.单工模式 单向通信,指通信只有一个方向进行,即从客户端流向服务,服务不会发送响应,而客户端也不会期望会有响应.这种情况下,客户端发送消息,然后继续执行 运行后报错: 2.双工模式 双工模式的特点是 ...

  9. WCF之通信工厂的简单使用

    WCF服务端已经创建好了以后,客户端可以直接通过选择服务引用,直接生成客户端的代理类,进而调用服务端的服务.其实说到底,服务端和客户端的通行就是通过终结点,然后在服务器端和客户端建立通信通道完成数据的 ...

随机推荐

  1. ubuntu后台配置无线网络

    一.静态配置: 1.编辑 /etc/network/interfaces: auto loiface lo inet loopback auto wlan0iface wlan0 inet stati ...

  2. double array trie 插入结点总结

    双数组Trie树索引的可操作性研究.pdf 提示:任一状态点的移动,会影响其Trie树中父节点的base值的选择以及兄弟结点位置的变动,而兄弟结点的移动又须变更相应的子节点的check值. 设待插入的 ...

  3. oracle中的隐式提交(auto commit)

    通常我们执行sql或pl/sql时,需要我们手工提交.这样才能使所做的更改永久保存到数据库. 但有时即使我们没有在sql或pl/sql中发出commit命令,所做的更改也会被提交.这种提交是在某些特定 ...

  4. swift基础--变量

    (1)变量与常量 (2)基本类型 (3)强制转换 (4)Bool类型 (5)元组 (6)可选值 //变量和常量 var str = "Hello, playground" let  ...

  5. OnlineJudge大集合

    什么是OJ Online Judge系统(简称OJ)是一个在线的判题系统.用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性. 一个用户提交的程序 ...

  6. C#实现IDispose模式

    .net的GC机制有两个问题:首先GC并不能释放所有资源,它更不能释放非托管资源.其次,GC也不是实时的,所有GC存在不确定性.为了解决这个问题.NET提供了析构函数 public class Dis ...

  7. 莫名其妙的主机名 VM_32_234_centos

    在腾讯服务器上部署的时候出现的莫名其妙的错误, 我在配置文件上都写 master, node1, 但是运行mapredure的时候的时候老是出现 Job job_1409546978133_0001 ...

  8. centos7安装chrome及加载poatman开发插件

    为什么要安装chrome?因为centos7的默认浏览器firefox的实在是不习惯,上面占了太多,本来显示器就不大... 好了,首先下载chome的rpm安装包(如果需要的可以留言,我有备份) 然后 ...

  9. Hibernate简介2

    一.主配置 ◆查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完全一样的语句再次执行时可以利用缓存数据.但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中可能会起反 ...

  10. PAT-乙级-1026. 程序运行时间(15)

    1026. 程序运行时间(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 要获得一个C语言程序的运行时间, ...