在VS2005上我写分布式软件的时候用的是Remtong。 那个时候我们可以先建立一个连接 sprovider = new BinaryServerFormatterSinkProvider(); cprovider = new BinaryClientFormatterSinkProvider(); sprovider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable(); props["port"] = 0; channel = new HttpChannel(props, cprovider, sprovider); try { ChannelServices.RegisterChannel(channel); } catch { channel = null; return false; } try { Str = "http://" + Adress + ":" + Port + "/"; return true; } catch { channel = null; return false; }
再通过 public Object Run( Type setType,string Url) { string MsStr = Str + Url; return Activator.GetObject(setType, MsStr); } 来得到一个远程对象。 但现在我用WCF来做分布式软件的时候遇到一个问题, ChannelFactory<Itesteshow> channelFactory = new ChannelFactory<Itesteshow>(Binding,EndpointAddress) 就是我必须正对每个接口(如:Itestshow)建立 一个创建不同类型通道的工厂。如果我有100个这样的接口是不是要写很多这样的通道工厂呢? 还有我的WCF客户端是自己写的,我现在建立一个这样的通用工厂。就是在客户端我需要加入一些发射机制来得这些接口。ChannelFactory<Type> channelFactory = new ChannelFactory<Type>()。我想用这样的方式来写一直都有“传递给通用 ChannelFactory 类的类型参数必须是接口类型”的错误! 我怎样才能写通用的呢? |
Activator.CreateInstance(typeof(ChannelFactory<>).MakeGenericType(typeof(ISampleServiceChannel)))
可以这么实现,但是我真的不确信你确实需要如此做。
谢谢,解决了我的问题!
我觉得接口的数目不会很多,因为到远程调用的时候为了减少通信次数常常利用Facade模式公布出几个接口,基本上都是粗粒度无状态的。
如果我想这样做,有什么方法实现吗?