随笔-145  评论-311  文章-50  trackbacks-17

基于Remoting的分布式技术框架设计回顾之三

分布式系统中客户端与服务器通讯时需要每次携带一此附属信息,比如:语种(支持多国语言系统),数据库连接字符串(支持多账套系统),客户端IP等。在每个应用服务的接口中增加一个这种附属参数对象在大型系统中是不现实的。.Net Remoting中的System.Runtime.Remoting.Messaging.ILogicalThreadAffinative 为我们解决了上面的困难,当然也要可以通过自定义Sink来达到效果,但需要多写很多代码,且要熟悉增加自定义Sink的功能。先从简单的学起吧。
在Common.dll中我们定义一个附属信息的实体,为了演示我们只为它加了一个属性。最重要的是实现了System.Runtime.Remoting.Messaging.ILogicalThreadAffinative接口,该接口是一个空接口,没有行为。
[Serializable]
public class ContentData : System.Runtime.Remoting.Messaging.ILogicalThreadAffinative  
    {
        private string ip;

        public ContentData(string ip)
        {
            this.ip = ip;
        }

        public string IP
        {
            get
            {
                return ip;
            }
        }
    }
在客户端
class Client
 {
        static void Main(string[] args)
        {
            string ip = "192.168.1.1";  //每个 客户端不一样
            ContentData data = new ContentData(ip);
            System.Runtime.Remoting.Messaging.CallContext.SetData("ip", data);

            Console.WriteLine("press enter to exit");
            Console.Read();
        }
}
在服务器端
static class Server
{
        public static string GetClientIP()
        {
            return (string)System.Runtime.Remoting.Messaging.CallContext.GetData("ip");
        }
}
这样我们就可以在服务器端的任意地方调用Server.GetClientIP()方法获得当前请求的客户端IP。

posted on 2006-12-28 23:08 蝈蝈 阅读(655) 评论(1) 编辑 收藏

评论:
#1楼 2007-09-21 16:40 | openkava      
想请教你一个问题,如果我客户端主程序是a.exe ,他调用 b.dll ,服务端有a_server.exe ,b_server.exe .
那么b.dll 调用远程服务的时候,怎么设置数据,
a的AppDomain 和B的AppDomain 是不一样的,在a中设置了数据:
System.Runtime.Remoting.Messaging.CallContext.SetData("UserToken",token);

那么在a_server.exe 是可以通过
ContextToken ct= (ContextToken)System.Runtime.Remoting.Messaging.CallContext.GetData("UserToken");

获得用户令牌。

这里有个问题,b需要再设置吗? b_server.exe 能够获得a中的CallContext传过来的数据吗? 通过实验,好像是不行,这个该如果解决?

谢谢

 回复 引用 查看   
基本资料:
蝈蝈
QQ:*******
MSN:hotsoho#msn.com
2004年09月30日
Dial Up
昵称:蝈蝈
园龄:7年4个月
粉丝:1
关注:0
<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

搜索

 
 

常用链接

随笔分类

随笔档案

文章分类

文章档案

相册

精品收藏

友情链接

积分与排名

  • 积分 - 124444
  • 排名 - 804

最新评论

阅读排行榜

评论排行榜

推荐排行榜