RemotingConfiguration.RegisterActivatedServiceType 方法

定义

将服务端上的对象 Type 注册为可根据请求从客户端激活的类型。

重载

RegisterActivatedServiceType(ActivatedServiceTypeEntry)

将在服务端提供的 ActivatedServiceTypeEntry 中记录的对象类型注册为可根据请求从客户端激活的类型。

RegisterActivatedServiceType(Type)

将服务端上指定的对象类型注册为可根据请求从客户端激活的类型。

RegisterActivatedServiceType(ActivatedServiceTypeEntry)

将在服务端提供的 ActivatedServiceTypeEntry 中记录的对象类型注册为可根据请求从客户端激活的类型。

public:
 static void RegisterActivatedServiceType(System::Runtime::Remoting::ActivatedServiceTypeEntry ^ entry);
public static void RegisterActivatedServiceType (System.Runtime.Remoting.ActivatedServiceTypeEntry entry);
static member RegisterActivatedServiceType : System.Runtime.Remoting.ActivatedServiceTypeEntry -> unit
Public Shared Sub RegisterActivatedServiceType (entry As ActivatedServiceTypeEntry)

参数

entry
ActivatedServiceTypeEntry

客户端激活类型的配置设置。

例外

在调用堆栈上部,至少有一个调用方没有配置远程处理类型和通道的权限。

注解

若要在服务器上创建客户端激活对象的实例,必须知道它 Type ,并且必须使用 方法在服务器端 RegisterActivatedServiceType 注册该对象。 若要获取客户端激活对象的新实例的代理,客户端必须先向 ChannelServices 注册通道,然后通过调用 newActivator.CreateInstance激活该对象。

若要使用 new 关键字 (keyword) 激活客户端激活的对象类型,必须先使用 RegisterActivatedClientType 方法在客户端上注册对象类型。 RegisterActivatedClientType调用 方法会为远程处理基础结构提供远程应用程序的位置,尝试在其中new创建它。 另一方面,如果使用 CreateInstance 方法创建客户端激活对象的新实例,则必须提供远程应用程序的 URL 作为参数,因此无需在客户端上事先注册。 若要为 CreateInstance 方法提供要在其中创建 对象的服务器的 URL,必须将 URL 封装在 类的 UrlAttribute 实例中。

有关客户端激活对象的详细说明,请参阅 客户端激活

另请参阅

适用于

RegisterActivatedServiceType(Type)

将服务端上指定的对象类型注册为可根据请求从客户端激活的类型。

public:
 static void RegisterActivatedServiceType(Type ^ type);
public static void RegisterActivatedServiceType (Type type);
static member RegisterActivatedServiceType : Type -> unit
Public Shared Sub RegisterActivatedServiceType (type As Type)

参数

type
Type

要注册的对象的 Type

例外

在调用堆栈上部,至少有一个调用方没有配置远程处理类型和通道的权限。

示例

下面的代码示例演示了将服务器上的对象类型注册为可由客户端激活的类型。 有关与呈现的服务器代码对应的客户端代码,请参阅 方法的示例 RegisterActivatedClientType

#using <system.dll>
#using <system.runtime.remoting.dll>
#using "service.dll"

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Tcp;

int main()
{
   ChannelServices::RegisterChannel( gcnew TcpChannel( 8082 ) );
   RemotingConfiguration::RegisterActivatedServiceType( HelloServiceClass::typeid );
   Console::WriteLine( "Press enter to stop this process." );
   Console::ReadLine();
   return 0;
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

public class ServerClass {

    public static void Main()  {

        ChannelServices.RegisterChannel(new TcpChannel(8082));

        RemotingConfiguration.RegisterActivatedServiceType(typeof(HelloServiceClass));

        Console.WriteLine("Press enter to stop this process.");
        Console.ReadLine();
    }
}
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp


Public Class ServerClass
      
   Public Shared Sub Main()
      
      ChannelServices.RegisterChannel(New TcpChannel(8082))     
      RemotingConfiguration.RegisterActivatedServiceType(GetType(HelloServiceClass))
      
      Console.WriteLine("Press enter to stop this process.")
      Console.ReadLine()

   End Sub

End Class

下面的代码示例演示在上面的示例代码中注册的服务对象。

#using <system.dll>

using namespace System;

public ref class HelloServiceClass: public MarshalByRefObject
{
private:
   static int n_instance;

public:
   HelloServiceClass()
   {
      n_instance++;
      Console::WriteLine(  "{0} has been created.  Instance # = {1}", this->GetType()->Name, n_instance );
   }

   ~HelloServiceClass()
   {
      Console::WriteLine( "Destroyed instance {0} of HelloServiceClass.", n_instance );
      n_instance--;
   }

   String^ HelloMethod( String^ name )
   {
      // Reports that the method was called.
      Console::WriteLine();
      Console::WriteLine( "Called HelloMethod on instance {0} with the '{1}' parameter.", n_instance, name );

      // Calculates and returns the result to the client.
      return String::Format( "Hi there {0}", name );
   }
};
using System;

public class HelloServiceClass : MarshalByRefObject {

    static int n_instance;

    public HelloServiceClass() {
        n_instance++;
        Console.WriteLine(this.GetType().Name + " has been created.  Instance # = {0}", n_instance);
    }

    ~HelloServiceClass() {
        Console.WriteLine("Destroyed instance {0} of HelloServiceClass.", n_instance);
        n_instance --;
    }

    public String HelloMethod(String name) {

        // Reports that the method was called.
        Console.WriteLine();
        Console.WriteLine("Called HelloMethod on instance {0} with the '{1}' parameter.",
                             n_instance, name);

        // Calculates and returns the result to the client.
        return "Hi there " + name + ".";
    }
}
Public Class HelloServiceClass
   Inherits MarshalByRefObject
   
   Private Shared n_instance As Integer

      
   Public Sub New()
      n_instance += 1
      Console.WriteLine(Me.GetType().Name + " has been created.  Instance # = {0}", n_instance)
   End Sub
      
   
   Protected Overrides Sub Finalize()
      Console.WriteLine("Destroyed instance {0} of HelloServiceClass.", n_instance)
      n_instance -= 1
      MyBase.Finalize()
   End Sub
   
   
   
   Public Function HelloMethod(name As [String]) As [String]
      
      ' Reports that the method was called.
      Console.WriteLine()
      Console.WriteLine("Called HelloMethod on instance {0} with the '{1}' parameter.", n_instance, name)
      
      ' Calculates and returns the result to the client.
      Return "Hi there " + name + "."

   End Function 'HelloMethod

End Class

注解

若要在服务器上创建客户端激活对象的实例,必须知道它 Type ,并且必须使用 方法在服务器端 RegisterActivatedServiceType 注册该对象。 若要获取客户端激活对象的新实例的代理,客户端必须先向 ChannelServices 注册通道,然后通过调用 newActivator.CreateInstance激活该对象。

若要使用 new 关键字 (keyword) 激活客户端激活的对象类型,必须先使用 RegisterActivatedClientType 方法在客户端上注册对象类型。 RegisterActivatedClientType调用 方法会为远程处理基础结构提供远程应用程序的位置,尝试在其中new创建它。 另一方面,如果使用 CreateInstance 方法创建客户端激活对象的新实例,则必须提供远程应用程序的 URL 作为参数,因此无需在客户端上事先注册。 若要为 CreateInstance 方法提供要在其中创建 对象的服务器的 URL,必须将 URL 封装在 类的 UrlAttribute 实例中。

有关客户端激活对象的详细说明,请参阅 客户端激活

另请参阅

适用于