码迷,mamicode.com
首页 > Windows程序 > 详细

c#网络通信框架networkcomms内核解析之三 消息同步调用

时间:2015-02-11 14:19:42      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

 networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn

客户端发送消息给服务器,服务器计算结果返回给客户端,这是网络通信应用程序中常见的使用情境。

拿用户登录举例子,客户端把包含用户名和密码的契约类发送给服务器,服务器从数据获取数据后与收到的契约类数据进行对比,如果一致,返回登录成功的信息,如果不一致,返回登陆不成功的信息

技术分享

NetworkComms框架支持消息的同步调用,就像调用本地方法一般。

举例说明(本例中使用networkcomms v3语法):

   用户登录

    契约类1  UserInfo 用于存储用户名和密码,并传递到服务器端    

 [ProtoContract]
    public  class UserInfo
    {
        [ProtoMember(1)]
        public string UserID;

        [ProtoMember(2)]
        public string Password;

        public UserInfo() { }

        public UserInfo(string userID, string password)
        {
            this.UserID = userID;
            this.Password = password;
        }

    }

契约类2  ResMessage  用于存储服务器返回给客户端的消息

 [ProtoContract]
    public class ResMessage
    {

        [ProtoMember(1)]
        public string Message;

        public ResMessage() { }

        public ResMessage(string message)
        {
            this.Message = message;
        }
    }

客户端:

                    //声明一个契约类
UserInfo userInfo = new UserInfo(); //给契约类的用户ID赋值 userInfo.UserID = txtUserID.Text.Trim(); //给契约类的用户密码赋值 userInfo.Password = txtPassword.Text.Trim(); //把UserInfo的契约类消息发送给服务器端,并获取返回的ResMessage类型的契约类消息 ResMessage loginContract = newTcpConnection.SendReceiveObject<UserInfo, ResMessage>("UserLogin", "ResUserLogin", 8000, userInfo);

//下面是获取到服务器返回结果的处理方法
if(loginContract.Message=="登录成功“)
MessageBox.Show("登录成功,跳转到下一页面");
else
MessageBox.Show("用户名或者密码错误");

 我们来总结一下上面的同步方法调用的格式

                              

 返回的契约类类型    loginContract=newTcpConnectin.SendReceiveObject<传递的契约类类型,返回的契约类类型>("消息类型“,”消息返回类型",超时时间,契约类实例) 
 ResMessage loginContract = newTcpConnection.SendReceiveObject<UserInfo, ResMessage>("UserLogin", "ResUserLogin", 8000, userInfo);

 

我们看一下服务器端对应的代码

//为消息类型声明对应的处理器  
NetworkComms.AppendGlobalIncomingPacketHandler<UserInfo>("UserLogin", IncomingLoginHandler);

//具体的处理方法

 //第三个参数为客户端发来的实际契约类类型,networkcomms通信框架自动把二进制数据解析为此类型数据
private void IncomingLoginHandler(PacketHeader header, Connection connection, UserInfo userInfo) { try {
//声明返回的契约类实例
ResMessage resMessage=new ResMessage();
string userID = userInfo.UserID; string passWord = userInfo.Password; //从数据库中验证用户名和密码 if (验证成功)
//给契约类实例赋值 resMessage.Message
= "登录成功"; else resMessage.Message = "用户名密码错误"; //把验证结果返回给客户端 connection.SendObject("ResUserLogin", resMessage); } catch (Exception ex) { LogTools.LogException(ex, "IncomingLoginHandler"); } }

 

c#网络通信框架networkcomms内核解析之三 消息同步调用

标签:

原文地址:http://www.cnblogs.com/networkcomms/p/4285910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!