我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > ASP专区 > Asp基础/应用 > 在Remoting Server上取得Remoting Client的IP地址
热门文章排行
热门文章排行 手推车”功能的实现(10-07)
八大法则防范ASP网站漏洞(10-23)
在JSP中访问数据库大全(10-23)
ASP教程十一、调试ASP脚本(10-23)
虚机服务中常见Asp.Net低级错误一览(03-21)
精采文章排行
精采文章排行 ASP.NET实现抓取网页中的链接(11-15)
ASP连接数据库的11种方法(11-10)
如何动态创建网页的RSS内容摘要(11-10)
ASP网站漏洞及入侵防范方法(11-10)
ASP自定义函数:对字符串正则替换(11-10)
技术专题推荐
网管论坛交流
 

在Remoting Server上取得Remoting Client的IP地址 

作者:佚名   来源:本站教程   点击:   日期:2007-03-22

In short, the Remoting Server can make use of Sink and Sink Provider to retrieve the IP address of the incoming request. The IP address is available in the Transport Headers of the incoming message. After retrieving the IP address in the Sink, we save the IP address to the CallContext, so that it will be available later in the code execution path as well. The followings are some background information regarding the topics:


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中巧用Response属性 ·第六课:ASP脚本循环语句
·在 Web 页上使用条件数值格式 ·连接数据库查询手册(不仅仅适用于asp)
·警惕"给你的FileSystemObject对象加把锁" ·用ASP做全文检索

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。