如何:生成宿主应用程序
如何:生成可远程处理的类型主题中定义的 RemotableType
类本身并无特别之处。若要让其他应用程序域中的对象能够远程创建此对象的实例,必须生成宿主或侦听器应用程序来执行下列操作:
选择并注册信道。信道是代表您处理网络协议和序列化格式的对象。
在 .NET 远程处理系统中注册类型,以使它能够使用您的信道侦听类型请求。
.NET Framework 包括三个默认信道:HttpChannel(默认使用 SOAP 格式)、TcpChannel(默认使用二进制格式)和 IpcChannel(默认使用二进制格式)。HttpChannel 无需开放端口即可穿过防火墙使用,它支持标准安全和身份验证协议。有关选择适合于您的方案的信道的更多信息,请参见信道。
任何类型的应用程序域均可用于生成侦听器应用程序 - Windows 窗体应用程序、ASP.NET Web 应用程序、控制台应用程序、Windows 服务(又称为 Windows NT 服务)或任何其他托管应用程序域。由于每个应用程序域都进行了远程配置,因此它们必须处于运行状态才能侦听请求。
注意: |
---|
与 COM 不同的是,远程处理不会为您启动宿主或服务器应用程序。这是 .NET 远程处理和 COM 远程激活之间的一个重要区别。 |
配置可通过编程方式进行,也可以使用应用程序或计算机配置文件完成。
远程处理系统使用此文件中的信息侦听远程请求,并将其路由到可远程处理的类型的实例。该文件指定服务器激活模式、要代表其进行侦听的类型名称和类型程序集、对象统一资源标识符 (URI) 或对象的外部名称(有关对象 URI 和远程处理的更多信息,请参见激活 URL)。
注意: |
---|
虽然上述配置文件中只有很少的设置,但使用 .NET 远程处理出现的大多数问题都是由于其中的部分设置有误或与客户端应用程序的配置设置不匹配造成的。人们很容易键错名称、忘记某个端口或忽略某个属性。如果远程处理应用程序出现问题,请先检查配置设置。 |
使用配置文件有很多优点,例如可以更改远程处理配置而不用重新编译可执行文件。有关 .NET 远程处理基础结构配置的信息,请参见远程处理设置架构。
注意: |
---|
有关如何生成和运行此示例的完整说明,请参见如何:编译和运行基本远程处理应用程序。 |
实现简单的使用配置文件的宿主应用程序域
执行完如何:生成可远程处理的类型中的步骤后,请在
remoting
下创建另一个目录并将其命名为host
。接着为远程类创建一个配置文件。宿主应用程序必须能够加载远程类的配置,因此应将该配置文件与宿主应用程序的程序集保存在同一个目录中,否则将找不到该配置文件并引发异常。下面的代码演示一个配置文件,此文件指定远程对象为 Singleton,其实现是一个位于程序集RemotableType
中的类RemotableType
。接下来,注册 HttpChannel 以侦听端口 8989。然后,将此文件保存在remoting\listener
目录中。文件名应遵从 应用程序名称.exe.config 模式。在本例中,它称为listener.exe.config
。<configuration> <system.runtime.remoting> <application> <service> <wellknown mode="Singleton" type="RemotableType, RemotableType" objectUri="RemotableType.rem" /> </service> <channels> <channel ref="http" port="8989"/> </channels> </application> </system.runtime.remoting> </configuration>
为所选语言创建一个新的源文件。在该源文件顶部导入 System.Runtime.Remoting 命名空间:
Imports System Imports System.Runtime.Remoting
using System; using System.Runtime.Remoting;
在 Main 方法中,加载配置远程类的配置文件,显示一条消息以让用户知道宿主正在运行,然后等待按键操作。将此文件保存在
remoting\listener
目录中。Public Class Listener Public Shared Sub Main() RemotingConfiguration.Configure("Listener.exe.config", False) Console.WriteLine("Listening for requests. Press enter to exit...") Console.ReadLine() End Sub End Class public class Listener { public static void Main() { RemotingConfiguration.Configure("Listener.exe.config", false); Console.WriteLine("Listening for requests. Press enter to exit..."); Console.ReadLine(); } }
将如何:生成可远程处理的类型中生成的 RemotableType.dll 复制到
remoting\listener
目录中。宿主应用程序必须引用此程序集。通过键入以下命令,将此类编译为一个可执行文件:vbc /r:RemotableType.dll Listener.vb csc /noconfig /r:RemotableType.dll Listener.cs
现在,您已得到一个名为
Listener.exe
的程序集。接下来,请尝试运行此程序集,以确定配置是否成功。如果防火墙当前正阻止 8989 端口,则可能会显示一个安全对话框。如果是这样,请单击“取消禁止[Unblock]”按钮暂时对该端口开放防火墙。有关如何使用可远程处理的类型的信息,请参见如何:生成客户端应用程序。
示例
' Listener.vb
Public Class Listener
Public Shared Sub Main()
RemotingConfiguration.Configure("Listener.exe.config", False)
Console.WriteLine("Listening for requests. Press enter to exit...")
Console.ReadLine()
End Sub
End Class
// Listener.cs
using System;
using System.Runtime.Remoting;
public class Listener
{
public static void Main(string[] args)
{
RemotingConfiguration.Configure("Listener.exe.config", false);
Console.WriteLine("Listening for requests. Press enter to exit...");
Console.ReadLine();
}
}
请参见
任务
参考
概念
其他资源
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。