在Remoting Server上取得Remoting Client的IP地址
Sinks and Sink Chains
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsinkssinkchains.asp
Using CallContext
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconusingcallcontext.asp
Code modified from the sample by Ingo Rammer, author of “Advanced .Net Remoting”:
using System;
using System.Collections;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Messaging ;
using System.Runtime.Remoting.Channels;
using System.Threading;
using System.Net;
namespace ClassLibRemotingIPSink
{
public class ClientIPServerSinkProvider: IServerChannelSinkProvider
{
private IServerChannelSinkProvider next = null;
public ClientIPServerSinkProvider(IDictionary properties, ICollection providerData)
{
}
public void GetChannelData (IChannelDataStore channelData)
{
}
public IServerChannelSink CreateSink (IChannelReceiver channel)
{
IServerChannelSink nextSink = null;
if (next != null)
{
nextSink = next.CreateSink(channel);
}
return new ClientIPServerSink(nextSink);
}
public IServerChannelSinkProvider Next
{
get { return next; }
set { next = value; }
}
}
public class ClientIPServerSink : BaseChannelObjectWithProperties, IServerChannelSink, IChannelSinkBase
{
private IServerChannelSink _next;
public ClientIPServerSink (IServerChannelSink next)
{
_next = next;
}
public void AsyncProcessResponse ( System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack sinkStack , System.Object state , System.Runtime.Remoting.Messaging.IMessage msg , System.Runtime.Remoting.Channels.ITransportHeaders headers , System.IO.Stream stream )
{
}
public Stream GetResponseStream ( System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack sinkStack , System.Object state , System.Runtime.Remoting.Messaging.IMessage msg , System.Runtime.Remoting.Channels.ITransportHeaders headers )
{
return null;
}
public System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage(System.Runtime.Remoting.Channels.IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage requestMsg, System.Runtime.Remoting.Channels.ITransportHeaders requestHeaders, System.IO.Stream requestStream, out System.Runtime.Remoting.Messaging.IMessage responseMsg, out System.Runtime.Remoting.Channels.ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
if (_next != null)
{
IPAddress ip = requestHeaders[CommonTransportKeys.IPAddress] as IPAddress;
Console.WriteLine(ip.ToString());
CallContext.SetData("ClientIPAddress",ip);
ServerProcessing spres = _next.ProcessMessage (sinkStack,requestMsg, requestHeaders,requestStream,out responseMsg,out responseHeaders,out responseStream);
return spres;
}
else
{
responseMsg=null;
responseHeaders=null;
responseStream=null;
return new ServerProcessing();
}
}
public IServerChannelSink NextChannelSink
{
get {return _next;}
set {_next = value;}
}
}
}
下一篇:ASP 写的自动生成SELECT 表单的函数 >>
相关文章:
- · 在Asp程序中取得表单所有内容的方法
- · 发布攻击台湾国旗设计网的ASP代码
- · ADO.NET 2.0 Feature Matrix
- · asp.net中的模态对话框
- · ASP.net中动态加载控件时一些问题的总结
- · 一切都因为分页-再谈分页
- · 简单快捷实现ASP在线发邮件功能
- · 改进性能和样式的 25+ ASP 技巧
- · 我的asp之路
- · 网上考试系统的一点心得
- · asp程序错误详细说明例表
- · 用好活动字幕标记—marquee
- · asp.net实现分组全选部分复选框
- · 在PPC上编译ASP,吃惊!!!
- · Asp之Request对象(1)
- · 汉字转拼音
- · 在ASP文件中调用DLL
- · 存储过程介绍及asp存储过程的使用
- · 如何把ASP编写成DLL
- · Asp.Net下导出/导入规则的Excel(.xls)文件
- · 我写ASP时常用到的一些函数(2)
- · asp 中处理异常
- · asp
- · ASP.Net Web Page深入探讨
- · IIS6 和Tomcat5 的整合
- · 浅谈如何建立三层体系结构的ASP应用程序
- · ASP控制每页打印行数
- · 对Blog的个性化修改
- · 日曆控件
- · 网页设计的价格标准
- · 在ASP.NET里通过URL传递参数得到乱码的解决方法
- · 常用ASP代码(一)
- · ASP分页代码,已经写成类了,值得参考
- · ASP错误处理
- · 带右键菜单的树形控件(1)
- · 我写ASP时常用到的一些函数
- · 金额转换算法
- · IIS防止文件下载完全手册(非更改文件名法)
