Freigeben über


ActivatedClientTypeEntry-Klasse

Enthält Werte für einen Objekttyp, der auf der Clientseite als Typ registriert ist, der auf dem Server aktiviert werden kann.

Namespace: System.Runtime.Remoting
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<ComVisibleAttribute(True)> _
Public Class ActivatedClientTypeEntry
    Inherits TypeEntry
'Usage
Dim instance As ActivatedClientTypeEntry
[ComVisibleAttribute(true)] 
public class ActivatedClientTypeEntry : TypeEntry
[ComVisibleAttribute(true)] 
public ref class ActivatedClientTypeEntry : public TypeEntry
/** @attribute ComVisibleAttribute(true) */ 
public class ActivatedClientTypeEntry extends TypeEntry
ComVisibleAttribute(true) 
public class ActivatedClientTypeEntry extends TypeEntry

Hinweise

Wenn Sie eine Instanz eines vom Client aktivierten Objekts auf dem Client erstellen möchten, müssen Sie seinen Type kennen, und das Objekt muss auf dem Client mithilfe der RegisterActivatedClientType-Methode registriert werden. Der Client muss zuerst mit ChannelServices einen Channel registrieren und anschließend das Objekt durch Aufruf von new aktivieren, um einen Proxy für eine neue Instanz des vom Client aktivierten Objekts abzurufen.

Wenn Sie mit dem Schlüsselwort new einen vom Client aktivierten Objekttyp aktivieren möchten, müssen Sie diesen unter Verwendung der RegisterActivatedClientType-Methode auf dem Client registrieren. Durch Aufruf von RegisterActivatedClientType weisen Sie der Remotinginfrastruktur den Speicherort der Remoteanwendung zu, in dem new diese zu erstellen versucht. Wenn Sie hingegen eine neue Instanz des vom Client aktivierten Objekts unter Verwendung der Activator.CreateInstance-Methode erstellen, müssen Sie den URL der Remoteanwendung als Parameter angeben. Somit ist keine vorherige Registrierung auf dem Client erforderlich. Um für die Activator.CreateInstance-Methode den URL des Servers angeben zu können, auf dem Sie das Objekt erstellen möchten, müssen Sie den URL in einer Instanz der UrlAttribute-Klasse kapseln.

Eine detaillierte Beschreibung vom Client aktivierter Objekte und der Aktivierung von Remoteobjekten finden Sie unter Aktivierung von Remoteobjekten.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie mit einem ActivatedClientTypeEntry ein vom Client aktiviertes Remoteobjekt registriert wird. Das Beispiel enthält drei Teile, einen Client, einen Server und ein Remoteobjekt, das von Client und Server verwendet wird.

Im folgenden Codebeispiel wird ein Client veranschaulicht:

Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp

Public Class MyClient
    
    Public Shared Sub Main()
        ' Register TCP Channel.
        ChannelServices.RegisterChannel(New TcpChannel())

        ' Create activated client type entry.
        Dim myActivatedClientTypeEntry As _
            New ActivatedClientTypeEntry(GetType(HelloServer), _
            "tcp://localhost:8082")

        ' Register type on client to activate it on the server.
        RemotingConfiguration.RegisterActivatedClientType( _
            myActivatedClientTypeEntry)

        ' Activate a client activated object type.
        Dim myHelloServer As New HelloServer("ParameterString")

        ' Print the object type.
        Console.WriteLine("Object type of client activated object: " + _
            myActivatedClientTypeEntry.ObjectType.ToString())

        ' Print the application URL.
        Console.WriteLine("Application url where the type is activated: " + _
            myActivatedClientTypeEntry.ApplicationUrl)

        ' Print the string representation of the type entry.
        Console.WriteLine( _
            "Type name, assembly name and application URL " + _
            "of the remote object: " + _
            myActivatedClientTypeEntry.ToString())

        ' Print a blank line.
        Console.WriteLine()

        ' Check that server was located.
        If myHelloServer Is Nothing Then
            Console.WriteLine("Could not locate server")
        Else
            Console.WriteLine("Calling remote object")
            Console.WriteLine(myHelloServer.HelloMethod("Bill"))
        End If
    End Sub 'Main
End Class 'MyClient
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

public class MyClient
{
    public static void Main()
    {
        // Register TCP Channel.
        ChannelServices.RegisterChannel(new TcpChannel());

        // Create activated client type entry.
        ActivatedClientTypeEntry myActivatedClientTypeEntry =
            new ActivatedClientTypeEntry(typeof(HelloServer),
            "tcp://localhost:8082");

        // Register type on client to activate it on the server.
        RemotingConfiguration.RegisterActivatedClientType(
            myActivatedClientTypeEntry);

        // Activate a client activated object type.
        HelloServer myHelloServer = new HelloServer("ParameterString");

        // Print the object type.
        Console.WriteLine(
            "Object type of client activated object: " +
            myActivatedClientTypeEntry.ObjectType.ToString());

        // Print the application URL.
        Console.WriteLine(
            "Application url where the type is activated: " +
            myActivatedClientTypeEntry.ApplicationUrl);

        // Print the string representation of the type entry.
        Console.WriteLine(
            "Type name, assembly name and application URL " +
            "of the remote object: " + 
            myActivatedClientTypeEntry.ToString());

        // Print a blank line.
        Console.WriteLine();

        // Check that server was located.
        if (myHelloServer == null)
        {
            Console.WriteLine("Could not locate server");
        }
        else
        {
            Console.WriteLine("Calling remote object");
            Console.WriteLine(myHelloServer.HelloMethod("Bill"));
        }
    }
}
#using <System.Runtime.Remoting.dll>
#using <ActivatedClientTypeEntry_Share.dll>

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Tcp;
static void main()
{
   // Register TCP Channel.
   ChannelServices::RegisterChannel( gcnew TcpChannel );
   
   // Create activated client type entry.
   ActivatedClientTypeEntry^ activatedClientTypeEntry = gcnew ActivatedClientTypeEntry( HelloServer::typeid, "tcp://localhost:8082" );
   
   // Register type on client to activate it on the server.
   RemotingConfiguration::RegisterActivatedClientType( activatedClientTypeEntry );
   
   // Activate a client activated object type.
   HelloServer^ helloServer = gcnew HelloServer( "ParameterString" );
   
   // Print the object type.
   Console::WriteLine( "Object type of client activated object: {0}", activatedClientTypeEntry->ObjectType->ToString() );
   
   // Print the application URL.
   Console::WriteLine( "Application url where the type is activated: {0}", activatedClientTypeEntry->ApplicationUrl->ToString() );
   
   // Print the string representation of the type entry.
   Console::WriteLine( "Type and assembly name and application URL of the remote object: {0}", activatedClientTypeEntry->ToString() );
   
   // Print a blank line.
   Console::WriteLine();
   
   // Check that server was located.
   if (  !helloServer )
   {
      Console::WriteLine( "Could not locate server" );
   }
   else
   {
      Console::WriteLine( "Calling remote object" );
      Console::WriteLine( helloServer->HelloMethod( "Bill" ) );
   }
}
import System.*;  
import System.Runtime.Remoting.*;  
import System.Runtime.Remoting.Channels.*;  
import System.Runtime.Remoting.Channels.Tcp.*;  

public class MyClient
{
    public static void main(String[] args)
    {
        // Register TCP Channel.
        ChannelServices.RegisterChannel(new TcpChannel());
        // Create activated client type entry.
        ActivatedClientTypeEntry myActivatedClientTypeEntry = 
            new ActivatedClientTypeEntry(HelloServer.class.ToType(), 
            "tcp://localhost:8082");
        // Register type on client to activate it on the server.
        RemotingConfiguration.RegisterActivatedClientType(
            myActivatedClientTypeEntry);
        // Activate a client activated object type.
        HelloServer myHelloServer = new HelloServer("ParameterString");
        // Print the object type.
        Console.WriteLine(("Object type of client activated object: " 
            + myActivatedClientTypeEntry.get_ObjectType().ToString()));
        // Print the application URL.
        Console.WriteLine("Application url where the type is activated: " 
            + myActivatedClientTypeEntry.get_ApplicationUrl());
        // Print the string representation of the type entry.
        Console.WriteLine("Type name, assembly name and application URL " 
            + "of the remote object: " + myActivatedClientTypeEntry.ToString());
        // Print a blank line.
        Console.WriteLine();
        // Check that server was located.
        if (myHelloServer == null) {
            Console.WriteLine("Could not locate server");
        }
        else {
            Console.WriteLine("Calling remote object");
            Console.WriteLine(myHelloServer.HelloMethod("Bill"));
        }
    } //main
} //MyClient

Im folgenden Codebeispiel wird ein Server für diesen Client veranschaulicht:

Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp

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

End Class 'MyServer
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

public class MyServer
{
    public static void Main()
    {
        ChannelServices.RegisterChannel(new TcpChannel(8082));
        RemotingConfiguration.RegisterActivatedServiceType(typeof(HelloServer));
        Console.WriteLine("Press enter to stop this process");
        Console.ReadLine();
   }
}
#using <ActivatedClientTypeEntry_Share.dll>
#using <System.Runtime.Remoting.dll>

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Tcp;
void main()
{
   ChannelServices::RegisterChannel( gcnew TcpChannel( 8082 ) );
   RemotingConfiguration::RegisterActivatedServiceType( HelloServer::typeid );
   Console::WriteLine( "Press enter to stop this process" );
   Console::ReadLine();
}
import System.*;  
import System.Runtime.Remoting.*;  
import System.Runtime.Remoting.Channels.*;  
import System.Runtime.Remoting.Channels.Tcp.*;  

public class MyServer
{
    public static void main(String[] args)
    {
        ChannelServices.RegisterChannel(new TcpChannel(8082));
        RemotingConfiguration.RegisterActivatedServiceType(HelloServer.
            class.ToType());
        Console.WriteLine("Press enter to stop this process");
        Console.ReadLine();
    } //main
} //MyServer

Im folgenden Codebeispiel wird das von Client und Server verwendete Remoteobjekt bereitgestellt:

Imports System

Public Class HelloServer
    Inherits MarshalByRefObject
    
    Public Sub New(myString As String)
        Console.WriteLine("HelloServer activated")
        Console.WriteLine("Parameter passed to the constructor is " + myString)
    End Sub 'New
    
    Public Function HelloMethod(myName As String) As String
        Console.WriteLine("HelloMethod : {0}", myName)
        Return "Hi there " + myName
    End Function 'HelloMethod
End Class 'HelloServer
using System;
public class HelloServer : MarshalByRefObject
{
    public HelloServer(String myString)
    {
        Console.WriteLine("HelloServer activated");
        Console.WriteLine("Parameter passed to the constructor is "+myString);
    }
    public String HelloMethod(String myName)
    {
        Console.WriteLine("HelloMethod : {0}",myName);
        return "Hi there " + myName;
    }
}
using namespace System;
public ref class HelloServer: public MarshalByRefObject
{
public:
   HelloServer( String^ myString )
   {
      Console::WriteLine( "HelloServer activated" );
      Console::WriteLine( "Paramater passed to the constructor is {0}", myString );
   }

   String^ HelloMethod( String^ myName )
   {
      Console::WriteLine( "HelloMethod : {0}", myName );
      return String::Format( "Hi there {0}", myName );
   }

};
import System.*;  

public class HelloServer extends MarshalByRefObject
{
    public HelloServer(String myString)
    {
        Console.WriteLine("HelloServer activated");
        Console.WriteLine("Parameter passed to the constructor is " 
            + myString);
    } //HelloServer

    public String HelloMethod(String myName)
    {
        Console.WriteLine("HelloMethod : {0}", myName);
        return "Hi there " + myName;
    } //HelloMethod
} //HelloServer

Vererbungshierarchie

System.Object
   System.Runtime.Remoting.TypeEntry
    System.Runtime.Remoting.ActivatedClientTypeEntry

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

ActivatedClientTypeEntry-Member
System.Runtime.Remoting-Namespace
RegisterActivatedClientType

Weitere Ressourcen

Clientaktivierung