.NET简谈组件程序设计之(详解NetRemoting结构)
.NETRemoting处理管道



































using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Lifetime;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Ipc;
namespace MyClassLibrary.CustomProvider
{
public class ClientCustomSink : BaseChannelSinkWithProperties, IClientChannelSink
{
IClientChannelSink nextchannelsink;
public ClientCustomSink(IClientChannelSink nextchannel)
{
nextchannelsink = nextchannel;
}
IClientChannelSink 成员#region IClientChannelSink 成员
public void AsyncProcessRequest(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders headers, System.IO.Stream stream)
{
nextchannelsink.AsyncProcessRequest(sinkStack, msg, headers, stream);
}
public void AsyncProcessResponse(IClientResponseChannelSinkStack sinkStack, object state, ITransportHeaders headers, System.IO.Stream stream)
{
nextchannelsink.AsyncProcessResponse(sinkStack, state, headers, stream);
}
public System.IO.Stream GetRequestStream(IMessage msg, ITransportHeaders headers)
{
msg.Properties.Add("自定义消息", "自定义消息值");
return nextchannelsink.GetRequestStream(msg, headers);
}
public IClientChannelSink NextChannelSink
{
get { return nextchannelsink; }
}
public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, System.IO.Stream requestStream, out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
nextchannelsink.ProcessMessage(msg, requestHeaders, requestStream, out responseHeaders, out responseStream);
}
public IDictionary NextProperise
{
get { return nextchannelsink.Properties; }
}
#endregion
}
}
在GetRequestStream中我们加入了一些自己定义的数据,我们在通过服务器端的IServerChannelSink获取这消息。
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Lifetime;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Ipc;
namespace MyClassLibrary.CustomProvider
{
public class ServerCustomSink : BaseChannelSinkWithProperties, IServerChannelSink
{
private IServerChannelSink iserverchannelsink;
public ServerCustomSink(IServerChannelSink serverchannel)
{
iserverchannelsink = serverchannel;
}
IServerChannelSink 成员#region IServerChannelSink 成员
public void AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, object state, IMessage msg, ITransportHeaders headers, System.IO.Stream stream)
{
if (iserverchannelsink != null)
iserverchannelsink.AsyncProcessResponse(sinkStack, state, msg, headers, stream);
throw new NotImplementedException();
}
public System.IO.Stream GetResponseStream(IServerResponseChannelSinkStack sinkStack, object state, IMessage msg, ITransportHeaders headers)
{
if (iserverchannelsink != null)
iserverchannelsink.GetResponseStream(sinkStack, state, msg, headers);
throw new NotImplementedException();
}
public IServerChannelSink NextChannelSink
{
get { return iserverchannelsink; }
}
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders,
System.IO.Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
sinkStack.Push(this, "ok");
return NextChannelSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
}
#endregion
}
}
本文出自 “深度训练(DotNet专场)” 博客 。[王清培版权所有,转载请给出署名]
最近更新
随机推荐
- 收购杂谈:招聘行业如若下嫁资本应怎
- HTC卖上海工厂是为VR筹钱?吃瓜群众可
- 利用Adobe Flash漏洞攻破Vista系统
- iCloud不是你的也不是苹果的,是黑客
- 创新驱动未来,一文看懂数博会上的MA
- Apple iPhoto Photocast订阅远程格式
- 编造传播黄光裕出狱谣言被罚40万!黄
- 安全漏洞提醒 思科发布公告修复4个漏
- 报告称Facebook又重新赢回年轻用户
- phpMydmin的GetShell思路
- 微软下周发布三款补丁 影响范围广仍有
- 媒体称360搜狗已签并购意向书 因百度
- cPanel failurl参数HTTP响应拆分漏洞
- Cisco ONS 平台存在多个安全缺陷
- 途牛半月股价翻倍 特卖模式备受追捧
- Firefox Window.opener属性Chrome权限
- Microsoft Windows Flash播放器电影卸
- 浏览器漏洞火狐占比最高
- 马云收购恒生集团案受证监会“特殊对
- Ventrilo服务器崩溃漏洞