如何指定.NET远程处理将用于执行回调的通道

时间:2010-10-07 04:06:50

标签: .net callback remoting channel

我有一个客户端(和服务器),在不同的协议上设置了2个通道,比方说X://和Y://。

如果我从服务器(S)上的客户端(C)调用服务(远程远程),需要对客户端执行回调(所以S-> C)有一种方法来指定使用哪个通道?在我的用例中,我希望从X://进行任何调用以回调X://以及通过Y://进行任何调用以回调Y://。

我目前的解决方案是为MarshalByRefObjects的每个通道实现一个自定义序列化代理(和选择器),在序列化它们时从SerializationInfo中删除另一个通道的URI。类似于:

            RemotingServices.GetObjectData(obj, info, context);
            IChannelInfo channelInfo = (IChannelInfo)info.GetValue("channelInfo", typeof(IChannelInfo));
            channelInfo.ChannelData = channelInfo.ChannelData.Where(x =>
            {
                ChannelDataStore ds = x as ChannelDataStore;
                if (ds != null)
                {
                    if (!(ds.ChannelUris.Length > 0 && ds.ChannelUris[0].StartsWith("Y://")))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                return true;
            }).ToArray();

这实际上有效但只是感觉不对(例如:依赖于填充的SerializationInfo中的“channelInfo”字符串)。有谁知道更好的解决方案?我通过RemotingServices.GetObjectData看了很多,但仍无法弄清楚它从哪里获取URI列表。

0 个答案:

没有答案