如何:生成客户端应用程序
本主题介绍一项传统技术,保留该技术是为了向后兼容现有的应用程序,不建议对新的开发使用该技术。现在应该使用 Windows Communication Foundation (WCF) 来开发分布式应用程序。
若要生成在如何:生成可远程处理的类型中定义并由在如何:生成宿主应用程序中创建的应用程序承载的远程类型的客户端,您的应用程序必须将自己注册为该远程对象的客户端,然后就像它在客户端的应用程序域中一样调用它。.NET 远程处理系统截获您的客户端调用,将它们转发给远程对象,并将结果返回给客户端。以下过程描述了如何生成基本远程处理客户端。
注意: |
---|
有关如何生成和运行此示例的完整说明,请参见如何:编译和运行基本远程处理应用程序。 |
生成基本远程处理客户端
执行完如何:生成宿主应用程序中的步骤后,请在
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。
注意: 虽然上述配置文件中只有很少的设置,但使用 .NET 远程处理出现的大多数问题都是由于其中的部分设置有误或与客户端应用程序的配置设置不匹配造成的。人们很容易键错名称、忘记某个端口或忽略某个特性。如果远程处理应用程序出现问题,请先检查配置设置。 用所选语言创建新的源文件。在 Main 方法中,调用 RemotingConfiguration.Configure,并向其传递客户端配置文件的名称 (
client.exe.config
)。接着,实例化RemotableType
的实例,并调用它的SayHello
方法。在remoting\client
目录中,将客户端应用程序另存为Client.cs
或Client.vb
。注意: 不应该将客户端应用程序与 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()); }
将 RemotableType.dll 程序集从
remoting\Type
复制到remoting\client
中。注意: 此时的一个常见问题是“如果我正在将程序集复制到客户端,那么该如何确定调用了远程对象”?这正是我们将调用添加到 RemotableType.SayHello()
方法中的Console.WriteLine
的原因。如果正在调用远程对象,Listener 进程中就会发生WriteLine
,否则将在客户端进程中发生WriteLine
。通过在
remoting\client
目录中键入以下命令来编译客户端应用程序:vbc /r:RemotableType.dll Client.vb
csc /noconfig /r:RemotableType.dll Client.cs
打开两个命令提示符。在一个命令提示符处,转到 remoting\listener 目录并运行 listener.exe。在另一个命令提示符处,转到 remoting\client 目录并运行 client.exe。客户端命令提示符应类似于:
C:\tmp\Remoting\client>client Hello, world
侦听器命令提示符应类似于:
C:\tmp\Remoting\listener>listener Listening for requests. Press Enter to exit... RemotableType.SayHello() was called!
您可以通过接收对
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());
}
}
另请参见
任务
参考
概念
其他资源
生成日期:2010-02-13