如何:生成客户端应用程序

如何:生成可远程处理的类型中我们定义了一个远程类型,在生成宿主应用程序中我们创建了一个应用程序,现在我们要生成该远程类型的客户端,并且要由该应用程序来承载;为此,您的应用程序必须将其自身注册为该远程对象的客户端,然后就像该对象位于客户端的应用程序域中一样调用它。.NET 远程处理系统将截获客户端调用,将其转发到远程对象,并将结果返回到客户端。以下代码过程介绍如何生成简单的远程处理客户端。

生成简单的远程处理客户端

  1. 导入 System.Runtime.Remoting 命名空间

  2. 创建一个客户端配置文件,以便客户端应用程序可以找到远程对象,并将该文件保存到客户端应用程序所在的那个文件夹中。例如,以下配置文件使远程处理系统知道可以在 RemotableType 程序集中找到 RemotableType 远程对象的类型信息,而且此客户端应该尝试创建并使用位于 https://localhost:8989/RemotableType.rem 的 RemotableType 对象。

    <configuration>
       <system.runtime.remoting>
          <application>
             <client>
                <wellknown 
                   type="RemotableType, RemotableType"
                   url="https://localhost:8989/RemotableType.rem"
                />
             </client>
          </application>
       </system.runtime.remoting>
    </configuration>
    

    有关该配置文件中的 URL 属性的详细信息,请参见激活 URL。如果要在网络上运行该应用程序,必须用远程计算机的名称替换客户端配置中的“localhost”。

    备注

    虽然前面的配置文件中只有几项设置,但在使用 .NET 远程处理时遇到的大多数问题都与这几项配置有关,原因或者是其中的某些设置不正确,或者是与客户端应用程序的配置设置不匹配。很容易输入错误的名称、忘记端口或者忽略属性。如果您的远程处理应用程序有问题,请首先检查配置设置。

  3. 将客户端应用程序另存为 Client.language-extension(或者使用您选择的其他文件名,其中的 language-extension 是您要编译的语言)。将该文件保存在保存如何:生成可远程处理的类型主题中生成的 RemotableType.dll 副本的同一个目录中。

    备注

    客户端应用程序不应保存在 Listener.exe 应用程序所在的那个目录中。如果保存到同一目录,您将无法确定是否在接收和利用远程引用,因为当应用程序位于同一个目录时,可能会进行程序集和类型解析。

  4. 使用 .NET Framework SDK 附带的命令行工具编译客户端应用程序或调用可执行文件。例如,要编译客户端应用程序 Client.language-extension,请在命令提示符处将目录更改为保存该客户端应用程序的文件夹,然后键入以下命令:

    vbc /r:RemotableType.dll Client.vb
    
    csc /noconfig /r:RemotableType.dll Client.cs
    

示例

' Client.vb 
Imports System
Imports System.Runtime.Remoting

Public Class Client
   Public Shared Sub Main()
      RemotingConfiguration.Configure("Client.exe.config")
      Dim remoteObject As New RemotableType()
      Console.WriteLine(remoteObject.StringMethod())
   End Sub 'Main
End Class 'Client
// Client.cs 
using System;
using System.Runtime.Remoting;

public class Client{

   public static void Main(){
      RemotingConfiguration.Configure("Client.exe.config");
      RemotableType remoteObject = new RemotableType();
      Console.WriteLine(remoteObject.StringMethod());
   }
}

请参见

任务

如何:生成宿主应用程序

参考

远程处理设置架构

概念

远程应用程序的配置
服务器激活

其他资源

生成基本的 .NET Framework 远程处理应用程序