.net Remoting IIS宿主 代码注册服务

Coordinator
Sep 21, 2011 at 3:07 PM
.net Remoting IIS宿主 代码注册服务

最近公司的一个项目,用的是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