sink部分代码如下:
Public Class CClientIPInjectorSink
Inherits BaseChannelObjectWithProperties
Implements IServerChannelSink
Public Function ProcessMessage(...) As System.Runtime.Remoting.Channels.ServerProcessing
Implements System.Runtime.Remoting.Channels.IServerChannelSink.ProcessMessage
Try
Dim IPAddr As IPAddress = CType(requestHeaders(CommonTransportKeys.IPAddress), IPAddress)
Console.WriteLine(IPAddr.ToString)'打印客户端ip
CallContext.SetData("ClientIP", IPAddr)
Catch
End Try
sinkStack.Push(Me, Nothing)
Dim srvProc As ServerProcessing = _nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream)
If srvProc = ServerProcessing.Complete Then
End If
Return srvProc
End Function
End Class问题:
1、捕捉的客户端ip怎么与对应的客户连接对应?有没有唯一的“客户id”可对应?
2、如果有,客户端怎么获得自己的“客户id”进而获得自己连接服务器的外网ip?
程序是参考别人的,只能打印ip,我自己也不是很了解原理。
Public Class CClientIPInjectorSink
Inherits BaseChannelObjectWithProperties
Implements IServerChannelSink
Public Function ProcessMessage(...) As System.Runtime.Remoting.Channels.ServerProcessing
Implements System.Runtime.Remoting.Channels.IServerChannelSink.ProcessMessage
Try
Dim IPAddr As IPAddress = CType(requestHeaders(CommonTransportKeys.IPAddress), IPAddress)
Console.WriteLine(IPAddr.ToString)'打印客户端ip
CallContext.SetData("ClientIP", IPAddr)
Catch
End Try
sinkStack.Push(Me, Nothing)
Dim srvProc As ServerProcessing = _nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream)
If srvProc = ServerProcessing.Complete Then
End If
Return srvProc
End Function
End Class问题:
1、捕捉的客户端ip怎么与对应的客户连接对应?有没有唯一的“客户id”可对应?
2、如果有,客户端怎么获得自己的“客户id”进而获得自己连接服务器的外网ip?
程序是参考别人的,只能打印ip,我自己也不是很了解原理。
解决方案 »
- C# WINDOWS 窗体 实现中文和其他语言切换怎么做?
- 怎样取出arraylist的值
- 题目求答案
- System.ComponentModel.Design.ServiceContainer这个类有人用过么?关于插件的。
- 如何获得打开窗体的实例(窗体间传值)?
- 请问高手C#进程间怎么实现资源互斥
- ???关于窗口控件获得焦点的的问题!怪怪的!
- 这是一段Json,如何得到Var 及sta
- 急!!向数据库里插入记录,,,
- 我如何把一个String变量转变成byte[]型的数组呢?(无内容)
- 怎样高效的实现一个关于字符串数组的问题???内详。。
- 访问oracle9i是用ms的OracleClient,还是用odp10.2
<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown
type="ServiceClass, ServiceClass"
url="http://localhost:8080/RemoteObject"
/>
</client>
<channels>
<channel ref="http">
<clientProviders>
<formatter ref="soap"/>
<provider ref="propsetter1" username="bob" writeToConsole="false">
</provider>
</clientProviders>
</channel>
</channels>
</application>
<channelSinkProviders>
<serverProviders>
<provider
id="propsetter1"
type="ChannelSinkPropertySetterProvider1, comm"
/>
</serverProviders>
</channelSinkProviders>
<debug loadTypes="true" />
</system.runtime.remoting>
</configuration>
然后在你的provider里的CreateSink里返回自定义的IClientChannelSink
这样你就可以在IClientChannelSink的ProcessMessage方法里控制消息的头的内容了