作了将近半年的项目,几乎都是复制粘贴,今天突然要配置一下.net remoting 中的设置,试了半天也老出错,最后找到这边文章,才稍微明白了一点。
Internet 信息服务 (IIS) 承载服务器激活的或客户端激活的对象时,通常在 Web.config 文件中注册这些对象;或者当直接承载这些对象时,在应用程序配置文件中注册它们。将应用程序承载的所有对象放置到 <service> 元素内。
当发布服务器激活的 (<wellknown>) 对象时,必须指示该对象是 SingleCall 对象还是 Singleton 对象、该对象的类型以及可以访问该对象的终结点。当发布客户端激活的 (<activated>) 对象时,必须只指示该对象的类型。以下示例说明如何为宿主应用程序域注册服务器端激活的对象和客户端激活的对象。
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown
mode = "SingleCall"
type = "myType,myAssembly"
objectUri = "myType.soap"
/>
<activated
type="MyActivatedType, TypeAssembly"
/>
</service>
</application>
</system.runtime.remoting>
</configuration>
<activated> 标记中的 type 属性指示该对象的完整类型名和程序集名称,与其在 <wellknown> 标记中出现一样。
用 IIS 配置服务器激活的类型
如果您想要在 Internet 信息服务中承载远程服务以利用 IIS 所提供的利益,则必须对配置文件稍作更改。您可以使用 Web.config 文件配置 IIS 以自动处理您的类型请求;或者可以通过使用 RemotingConfiguration.Configure 并传递配置文件的名称,在 Global.asax 文件中使用 Application_Start 处理程序加载您的配置文件。在这两种情况中:
不使用 <application> 标记的 name 属性指定应用程序名称。您为承载可远程处理类型而创建的虚拟目录将是到您的类型的客户端的应用程序名称。
不在 <application> 标记内使用 <channel> 标记的 port 属性指定一个端口。如果 IIS 创建新线程来为数目增加的请求提供服务,则可以创建新信道,但将引发一个异常,因为该端口已由原始信道使用。而是应在 Internet 服务管理器中指定要使用的端口。.NET 远程处理服务将在该端口上为您的可远程处理的类型处理任何请求。
实例
<system.runtime.remoting>
<application>
<service>
<wellknown mode="SingleCall" type="MITSUKOSHI.GC.MM.GCMMSOR00.Facade.GCMMSOR00Facade, GCMMSOR00Facade" objectUri="GCMMSOR00F.rem" />
</service>
<service>
<wellknown mode="SingleCall"
type="MITSUKOSHI.GC.MM.GCMMSOR00.Facade.GCMMSOR01Facade, GCMMSOR00Facade"
objectUri="GCMMSOR01.rem" />
</service>
<service>
<wellknown mode="SingleCall"
type="MITSUKOSHI.GC.MM.GCMMMCOMM.UI.GCMMMCOMMFacade.MMFacade, MMFacade"
objectUri="MM.rem" />
</service>
<channels>
<channel ref="http server">
<serverProviders>
<formatter ref="soap" typeFilterLevel="Full"/>
<formatter ref="binary" typeFilterLevel="Full"/>
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
<openMeisterEnterprise.invocation>
<!-- OmInvoker タイプの登録 -->
<invoker name="Remote" type="NECST.OME.AFW.Invocation.OmWellKnownServiceInvoker, OmAfwCore" base="http://Localhost/BusinessServer/" />
<invoker name="Local" type="NECST.OME.AFW.Invocation.OmLocalInvoker, OmAfwCore"/>
<facade name="GCMMSOR00Facade" invoker="Remote" path="GCMMSOR00F.rem" />
<facade name="GCMMSOR01Facade" invoker="Remote" path="GCMMSOR01.rem" />
<facade name="MMFacade" invoker="Remote" path="MM.rem" />
</openMeisterEnterprise.invocation>
web.config 中蓝色代表类型,也就是类名,红色代表Assembly名称,就是在一个工程的属性里面那个Assembly的名字,如果两个类在同一个工程下,那么他们的assembly部分是相同的,不同的在于他们的类名。
app.config中用到的是他们的类名