您的位置:首页 > 其它

化零为整WCF(6) - 消息处理(异步调用OneWay, 双向通讯Duplex)

2008-04-14 17:08 351 查看
[索引页]

[源码下载]

[align=center]化零为整WCF(6) - 消息处理(异步调用OneWay, 双向通讯Duplex)[/align]

作者:webabcd

介绍

WCF(Windows Communication Foundation) - 消息处理:通过操作契约的IsOneWay参数实现异步调用,基于Http, TCP, Named Pipe, MSMQ的双向通讯。

示例(异步调用OneWay)

1、服务

IOneWay.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

namespace WCF.ServiceLib.Message

OneWay.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

namespace WCF.ServiceLib.Message

2、宿主

OneWay.cs

using (ServiceHost host = new ServiceHost(typeof(WCF.ServiceLib.Message.OneWay)))

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<services>

<!--name - 提供服务的类名-->

<!--behaviorConfiguration - 指定相关的行为配置-->

<service name="WCF.ServiceLib.Message.OneWay" behaviorConfiguration="MessageBehavior">

<!--address - 服务地址-->

<!--binding - 通信方式-->

<!--contract - 服务契约-->

<endpoint address="" binding="basicHttpBinding" contract="WCF.ServiceLib.Message.IOneWay" />

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

<host>

<baseAddresses>

<add baseAddress="http://localhost:12345/Message/OneWay/"/>

</baseAddresses>

</host>

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name="MessageBehavior">

<!--httpGetEnabled - 使用get方式提供服务-->

<serviceMetadata httpGetEnabled="true" />

<serviceDebug includeExceptionDetailInFaults="true"/>

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

3、客户端

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.ServiceModel;

namespace Client2.Message

App.config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<client>

<!--address - 服务地址-->

<!--binding - 通信方式-->

<!--contract - 服务契约-->

<endpoint address="http://localhost:12345/Message/OneWay/" binding="basicHttpBinding" contract="MessageSvc.OneWay.IOneWay" />

</client>

</system.serviceModel>

</configuration>

运行结果:

单击"btnWithOneWay"按钮,没有弹出提示框。(异步操作)

单击"btnWithoutOneWay"按钮,弹出错误提示框。(同步操作)

示例(双向通讯Duplex)

1、服务

IDuplex.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

namespace WCF.ServiceLib.Message

Duplex.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

namespace WCF.ServiceLib.Message

2、宿主

Duplex.cs

using (ServiceHost host = new ServiceHost(typeof(WCF.ServiceLib.Message.Duplex)))

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<services>

<!--name - 提供服务的类名-->

<!--behaviorConfiguration - 指定相关的行为配置-->

<service name="WCF.ServiceLib.Message.Duplex" behaviorConfiguration="MessageBehavior">

<!--address - 服务地址-->

<!--binding - 通信方式-->

<!--contract - 服务契约-->

<!--双向通讯可以基于Http, TCP, Named Pipe, MSMQ;其中基于Http的双向通讯会创建两个信道(Channel),即需要创建两个http连接-->

<!--endpoint address="Message/Duplex" binding="wsDualHttpBinding" contract="WCF.ServiceLib.Message.IDuplex" /-->

<endpoint address="Message/Duplex" binding="netTcpBinding" contract="WCF.ServiceLib.Message.IDuplex" />

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

<host>

<baseAddresses>

<add baseAddress="http://localhost:12345/Message/Duplex"/>

<add baseAddress="net.tcp://localhost:54321/"/>

</baseAddresses>

</host>

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name="MessageBehavior">

<!--httpGetEnabled - 使用get方式提供服务-->

<serviceMetadata httpGetEnabled="true" />

<serviceDebug includeExceptionDetailInFaults="true"/>

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

3、客户端

Duplex.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

using System.Windows.Forms;

namespace Client2.Message

CallbackType.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Client2.Message

App.config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<client>

<!--address - 服务地址-->

<!--binding - 通信方式-->

<!--contract - 服务契约-->

<!--endpoint address="http://localhost:12345/Message/Duplex/" binding="wsDualHttpBinding" contract="MessageSvc.Duplex.IDuplex" /-->

<endpoint address="net.tcp://localhost:54321/Message/Duplex" binding="netTcpBinding" contract="MessageSvc.Duplex.IDuplex" />

</client>

</system.serviceModel>

</configuration>

运行结果:

单击"btnDuplex"按钮后弹出提示框,显示"Hello: webabcd"

OK

[源码下载]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: