最近公司的一个项目,用的是Remoting,结构是这样的
有表A,B,C
接口IA,IB,IC分别是对表A,B,C的操作
对应的实现有Aimpl,Bimpl,Cimpl
在WEB项目的web.config里配置要注册的服务
<wellknown mode="SingleCall" type="MySystem.impl" objectUri="Aimpl.rem"/>
<wellknown mode="SingleCall" type="MySystem.impl" objectUri="Bimpl.rem"/>
<wellknown mode="SingleCall" type="MySystem.impl" objectUri="Cimpl.rem"/>
每加一个表(类)就要在配置文件里加一条配置,领导说这样发布时太麻烦了,每次都要改。
于是想改成代码注册服务类,
Assembly asb = Assembly.LoadFile(strPath);
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel,false);
//反射获取类型
Type[]tps=asb.GetExportedTypes();
foreach (Type t in tps)
{
if (t.Name.Length <= 4 && t.Name.Substring(t.Name.Length - 4) != "Impl")
continue;
RemotingConfiguration.RegisterWellKnownServiceType(t,t.Name + ".rem", WellKnownObjectMode.SingleCall);
}
结果怎么试也不行,在微软中文论坛,问了一下,搞了一近,最后才算是搞明白怎么回事了。
原来IIS宿主的,不需要
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel,false);
这个是windows进程的,在IIS下不需这两行代码,只要去掉就可以了。
非常感谢Galactica的耐心解答,具体请参看:http://social.microsoft.com/Forums/zh-CN/2212/thread/251cca77-9d0c-46cd-96d4-d1e942f0bd1a