专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > WCF

WCF基础之设计跟实现服务协定

发布时间:2011-06-23 13:51:02 文章来源:www.iduyao.cn 采编人员:星星草
WCF基础之设计和实现服务协定

本来前面还有一个章节“WCF概述”,这章都是些文字概述,就不“复制”了,直接从第二章开始。

当然学习WCF还是要些基础的。https://msdn.microsoft.com/zh-cn/hh148206这个就是“原文”了,喜欢WCF的可以自己去下载。

 

WCF简单术语:

消息:消息是一个独立的数据单元,主要由消息头和消息正文组成,入门的时候我对它的理解简单说:发送一个消息,就是调用了一个方法,具体的以后再说。

服务:服务说简单点就是终结点的集合。

终节点:即包含我们所谓的WCF的ABC三要素的接受和发送消息的构造。

 

类或者接口都可以定义服务协定,但是推荐使用接口,它可以实现多个服务协定,因为接口可以继承多个,类只能继承一个。

//如下就是一个简单的服务协定
//ServiceContract属性的接口都表示该接口是一个服务协定,
//OperationContract属性的方法都表示该方法是一个操作协定
//只有标记了这两个特性,才能被客户端发现
[ServiceContract]
public interface IHelloWCFService
{
    [OperationContract]
    string SayHello();
}

服务协定的三种操作模式:请求/应答、单向和双工

前两种是通过OperationContract的IsOneWay=True||False来切换

True为单向,False为请求/应答。IsOneWay默认值为False。

给个小提示:操作的返回值为void的时候也是有返回值的,所以如果是void请把IsOneWay设为True

[OperationContract(IsOneWay=true)]
void SayHello();

接下来说说双工,这玩意儿。。。。。。。我就先说说我的理解,然后弄点代码。你自己下来多写两遍,不懂,你都会懂了。
说说人和洗衣机,人是客户端,洗衣机就是服务端。现在我们要洗衣服了,我们要调用洗衣机开始洗衣服的方法,并把衣服作为参数放进洗衣机,洗衣服肯定不是几分钟搞定的,这时候我们可以做些其他的,看看电视,扫扫地之类的,而洗衣机洗完衣服之后怎么让我们知道呢,洗衣机就说要不我给你个提示音吧,我说好,你就发出嘀嘀的声音,那么一切就ok了,当然你得跟这个洗衣机单独在一个房子里,要是房子里有许多洗衣机,或者许多其他人,洗衣机响了,你也不知道是不是你的洗好了。洗衣机洗完后,会发出嘀嘀的声音,我们人听到这声音以后,就会自动调用收衣服的方法。

好,就这么多了不知道说的是否够意思,反正你自己多写吧!

这是服务端代码

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IYiFuXiHaoLe))]
public interface IXiYiJiService
{
     [OperationContract(IsOneWay=true)]
     void XiYiFu();
}

 [ServiceContract]
 public interface IYiFuXiHaoLe
{
     [OperationContract(IsOneWay=true)]
     void DiDi();
}

public class XiYiJi:IXiYiJiService
{
    public void XiYiFu()
    {
         //洗衣服耗时5秒
         Thread.Sleep(5000);
         //洗好了,开始发出DIDi声让人听到
         IYiFuXiHaoLe callback = OperationContext.Current.GetCallbackChannel<IYiFuXiHaoLe>();
         callback.DiDi();
    }
}

这是客户端的

    class Program
    {
        static void Main(string[] args)
        {
            TingDaoShengYin tdsy = new TingDaoShengYin();
            InstanceContext context = new InstanceContext(tdsy);

            MyService.XiYiJiServiceClient myClient = new MyService.XiYiJiServiceClient(context);
            myClient.XiYiFu();

            Console.ReadKey();
        }
    }

    public class TingDaoShengYin:MyService.IXiYiJiServiceCallback
    {
        public void DiDi()
        {
            Console.WriteLine("开始收衣服了");
        }
    }

sorry,忘了,要选一个支持双工的绑定。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: