zoukankan      html  css  js  c++  java
  • 对于最近学习WCF的总结——唔聊的服务

    作为今年的应届毕业生,找工作的压力确实很大,貌似今年的就业形势不是特别的好,如果博友们有手机客户端的职位,请帮我推荐一下,津京地区windows phone,ios,android皆可。

    好了,言归正传。今天需要总结的是最近学的WCF服务编程,这个是我的毕业设计。因为刚学,如果文中有什么错误,还请多多指正。

    首先介绍一下,整个应用的业务逻辑。我的毕业设计是一个多客户端平台的随机交友应用,起名叫做唔聊,有点类似于omegle.com,就是随机匹配一些陌生人进行聊天,但是不像陌陌那样主动去选择符合条件的用户,因为性别和头像总会影响我们的选择,但在omegle的基础上加入了用户信息,依然不带加好友功能。如果有富余的时间,还会加入一个按照用户常聊关键词进行匹配的功能,这其中就涉及到了自然语言处理的算法,一时半会儿搞不定。

    一本《WCF服务编程》就要700多页,当一本字典不错,但是实在看不下去了。后来看了CSDN上老周的WCF系列,感觉比较适合入门在这里推荐一下。http://blog.csdn.net/column/details/wcf-example-come.html

    我先说说作为一个入门者,要先从那个地方入手。我们需要了解几样比较基本的东西:终结点、契约、宿主、客户端调用,其他东西可以暂时先不管,知道这三样,就可以先写出个东西来了。

    终结点(Endpoint):终结点需要了解三样东西:Address、Binding、Contract,简称ABC。

    1. Address是指服务的Uri地址,
    2. Binding是绑定方式,绑定方式基本为5种,BasicHttpBinding、NetTcpBinding、NetNamePipeBinding、WSHttpBinding、NetMsmqBinding
    3. Contract为契约,指向为客户端提供服务的接口

          老周的终结点基本都是用编程方式写的,所以一下用config的方式来展示一下:

    <endpoint address="http://169.254.80.80/WuChatServer/HostSvc.svc" binding="wsHttpBinding" bindingConfiguration="WcfMode.WSHttpBinding"
                      name="HostSvc" contract="WuChatServer.IHost"/>

    契约(Contract):WCF定义了四种契约:服务契约、数据契约、错误契约、消息契约。契约说白了,就是供客户端调用的服务,比如客户端需要调用服务端的加法方法,就定义一个接口,标为服务契约,在接口中的加法方法上标上操作契约。如果需要利用一个数据结构去通信,就用数据契约定义一个结构体,或者一个类。

    如下:

        [ServiceContract]
        public interface IService
        {
            [OperationContract]
            int AddMethod(int a,int b);
        }
    public class MyService : IService
      {
        public int AddMethod(int a, int b)
        {
          return a + b;
        }
      }

    我为唔聊定义的IHost暂时为这样的:

        [ServiceContract(SessionMode = SessionMode.NotAllowed)]
        interface IHost
        {
            [OperationContract]
            bool ConnectCumm(string commId);//连接服务,加入在线列表
            [OperationContract]
            bool DisConnectCumm(string commId);//断开服务
            [OperationContract]
            bool ClientSend(string commId, List<byte[]> msg);//客户端发送消息
            [OperationContract]
            List<List<byte[]>> GetHostMessage(string id);//获取服务端消息
            [OperationContract]
            string GetStrangerId(string commId);//获取聊天对象的id
            [OperationContract]
            bool CheckConnect(string id);//检查是否在线
            [OperationContract]
            string GetChattingNum();//获取在线人数
            [OperationContract]
            bool GetIsChatting(string commId);//获取是否为聊天状态,或者等待状态
        }

    宿主(Host):因为WCF服务不能凭空存在,每个WCF服务必须托管在Windows进程中,所以我们必须为WCF服务提供一个宿主。这个宿主可以是asp.net、Winform、WPF、Silverlight等。我在唔聊中暂时用了一个WPF的窗体程序来做为宿主,你可以直接引用WCF的动态库来实现。

    客户端调用(Client):客户端如何调用WCF服务是我们比较关心的,作为可以跨平台的服务框架,WCF可利用Restful来提供客户端调用的方式,通过HTTP的GET、PUT、POST 和 DELETE等方法进行操作。目前唔聊仅实现可在.net客户端(WPF、windows phone)的一部分功能,所以还是讲一下.net的调用方式。

    在客户端的工程上右键引用服务

    然后点击发现,可以搜索到同解决方案下的WCF服务,也可以直接输入WCF服务的地址进行引用。在高级页面中我们可以选择是否提供异步的调用方式,WPF客户端默认为只有同步调用方式,而WP8客户端为避免程序假死仅提供异步调用方式。

    然后在客户端的ViewModel中编写代码:

    new HostSvc.HostClient().ConnectCumm(id);//同步
    var hostclient = new HostClient.HostClient();//异步
                                hostclient.ConnectCummCompleted += new EventHandler<HostClient.ConnectCummCompletedEventArgs>(ConnectResult);
                                hostclient.ConnectCummAsync(id);
    
    void ConnectResult(object sender, HostClient.ConnectCummCompletedEventArgs e)
            {
    
            }

    WP8客户端如果在调用服务中发生异常,请检查服务地址是否为localhost,如果是,按此方案解决:http://msdn.microsoft.com/zh-CN/library/windowsphone/develop/jj684580%28v=vs.105%29.aspx

    android调用WCF服务可以参见:http://www.cnblogs.com/davidgu/archive/2012/05/16/2504182.html

    基本上通过编写终结点、契约接口、服务宿主、客户端引用这么几步,一个WCF服务就算搭建好了。

    过两天我会具体介绍客户端中的一些故事,稍微讲述一下MVVM和android的编程。

    分享一张WP8客户端的设计图,P的有点水,请见谅吧。

    感谢阅读倾剑飞血的博客

    本文地址:http://www.cnblogs.com/jacklandrin/archive/2013/04/20/3033248.html

    联系我:jacklandrin@hotmail.com

    本文版权归作者所有,欢迎转载,演绎或用于商业目的,但是必须说明本文出处(包含链接)。

  • 相关阅读:
    有哪些带汉字的 LOGO 或者图标设计得很出色?
    从初级晋级高级UI设计师学习路线+全套视频
    UI常见面试题-整体素养篇
    PS精修电影胶片调色特效[附素材及方法]
    全链路UI、UE设计学习路线+视频教程完整版
    网页设计之栅格系统及应用
    移动端APP产品设计结构及专业术语
    九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
    PAT树_层序遍历叶节点、中序建树后序输出、AVL树的根、二叉树路径存在性判定、奇妙的完全二叉搜索树、最小堆路径、文件路由
    数据结构第三部分:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算
  • 原文地址:https://www.cnblogs.com/jacklandrin/p/3033248.html
Copyright © 2011-2022 走看看