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

本主题介绍一项传统技术,保留该技术是为了向后兼容现有的应用程序,不建议对新的开发使用该技术。现在应该使用  Windows Communication Foundation (WCF) 来开发分布式应用程序。

若要生成在如何:生成可远程处理的类型中定义并由在如何:生成宿主应用程序中创建的应用程序承载的远程类型的客户端,您的应用程序必须将自己注册为该远程对象的客户端,然后就像它在客户端的应用程序域中一样调用它。.NET 远程处理系统截获您的客户端调用,将它们转发给远程对象,并将结果返回给客户端。以下过程描述了如何生成基本远程处理客户端。

y6dc64f2.note(zh-cn,VS.100).gif注意:
有关如何生成和运行此示例的完整说明,请参见如何:编译和运行基本远程处理应用程序

生成基本远程处理客户端

  1. 执行完如何:生成宿主应用程序中的步骤后,请在 remoting 下创建一个名为 client 的新目录。如下面的代码所示,为客户端应用程序创建一个配置文件,并将该文件保存在 remoting\client 目录中。文件名应遵从 app-name.exe.config 模式。在此例中,它称为 client.exe.config。下面的配置文件通知远程处理系统,RemotableType 远程对象的类型信息位于 RemotableType 程序集中,而该对象位于 https://localhost:8989/RemotableType.rem 上。

    <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。

    y6dc64f2.note(zh-cn,VS.100).gif注意:
    虽然上述配置文件中只有很少的设置,但使用 .NET 远程处理出现的大多数问题都是由于其中的部分设置有误或与客户端应用程序的配置设置不匹配造成的。人们很容易键错名称、忘记某个端口或忽略某个特性。如果远程处理应用程序出现问题,请先检查配置设置。

  2. 用所选语言创建新的源文件。在 Main 方法中,调用 RemotingConfiguration.Configure,并向其传递客户端配置文件的名称 (client.exe.config)。接着,实例化 RemotableType 的实例,并调用它的 SayHello 方法。在 remoting\client 目录中,将客户端应用程序另存为 Client.csClient.vb

    y6dc64f2.note(zh-cn,VS.100).gif注意:
    不应该将客户端应用程序与 Listener.exe 应用程序保存在同一个目录中。如果这样,您就无法确保您正在接收和使用远程引用,因为如果这两个应用程序位于同一个目录中,则可能会发生程序集和类型解析。

       Public Shared Sub Main()
          RemotingConfiguration.Configure("Client.exe.config")
          Dim remoteObject As New RemotableType()
          Console.WriteLine(remoteObject.SayHello())
       End Sub 'Main
    
       public static void Main(){
          RemotingConfiguration.Configure("Client.exe.config");
          RemotableType remoteObject = new RemotableType();
          Console.WriteLine(remoteObject.SayHello());
       }
    
  3. 将 RemotableType.dll 程序集从 remoting\Type 复制到 remoting\client 中。

    y6dc64f2.note(zh-cn,VS.100).gif注意:
    此时的一个常见问题是“如果我正在将程序集复制到客户端,那么该如何确定调用了远程对象”?这正是我们将调用添加到 RemotableType.SayHello() 方法中的 Console.WriteLine 的原因。如果正在调用远程对象,Listener 进程中就会发生 WriteLine,否则将在客户端进程中发生 WriteLine

  4. 通过在 remoting\client 目录中键入以下命令来编译客户端应用程序:

    vbc /r:RemotableType.dll Client.vb
    
    csc /noconfig /r:RemotableType.dll Client.cs
    
  5. 打开两个命令提示符。在一个命令提示符处,转到 remoting\listener 目录并运行 listener.exe。在另一个命令提示符处,转到 remoting\client 目录并运行 client.exe。客户端命令提示符应类似于:

    C:\tmp\Remoting\client>client 
    Hello, world 
    
  6. 侦听器命令提示符应类似于:

    C:\tmp\Remoting\listener>listener
    Listening for requests. Press Enter to exit...
    RemotableType.SayHello() was called!
    
  7. 您可以通过接收对 RemotableType.SayHello() 的调用的侦听器的输出看到它们。

示例

' 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.SayHello())
   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.SayHello());
   }
}

另请参见

任务

如何:生成宿主应用程序

参考

远程处理设置架构

概念

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

其他资源

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

生成日期:2010-02-13