RemotingConfiguration.RegisterWellKnownServiceType Yöntem

Tanım

Hizmet ucundaki bir nesneyi Type iyi bilinen bir tür (tek çağrı veya tekil) olarak kaydeder.

Aşırı Yüklemeler

RegisterWellKnownServiceType(WellKnownServiceTypeEntry)

hizmet ucunda sağlanan WellKnownServiceTypeEntry öğesine kaydedilen bir nesneyi Type iyi bilinen bir tür olarak kaydeder.

RegisterWellKnownServiceType(Type, String, WellKnownObjectMode)

Yeni bir örneğini WellKnownServiceTypeEntrybaşlatmak için verilen parametreleri kullanarak hizmet ucundaki bir nesneyi Type iyi bilinen bir tür olarak kaydeder.

RegisterWellKnownServiceType(WellKnownServiceTypeEntry)

hizmet ucunda sağlanan WellKnownServiceTypeEntry öğesine kaydedilen bir nesneyi Type iyi bilinen bir tür olarak kaydeder.

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

Parametreler

entry
WellKnownServiceTypeEntry

İyi bilinen tür için yapılandırma ayarları.

Özel durumlar

Çağrı yığınındaki en üstteki arayanlardan en az birinin uzaktan iletişim türlerini ve kanallarını yapılandırma izni yoktur.

Örnekler

#using <system.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::Http;
using namespace System::Runtime::Remoting::Messaging;
using namespace System::Runtime::Serialization;

public ref class RemoteObject: public MarshalByRefObject
{
public:
   void Method1( LocalObject^ param )
   {
      Console::WriteLine( "Invoked: Method1( {0})", param );
   }
};

int main()
{
   ChannelServices::RegisterChannel( gcnew HttpChannel( 8090 ) );
   WellKnownServiceTypeEntry^ wkste = gcnew WellKnownServiceTypeEntry( RemoteObject::typeid,"RemoteObject",WellKnownObjectMode::Singleton );
   RemotingConfiguration::RegisterWellKnownServiceType( wkste );
   RemoteObject^ RObj = dynamic_cast<RemoteObject^>(Activator::GetObject( RemoteObject::typeid, "http://localhost:8090/RemoteObject" ));
   LocalObject^ LObj = gcnew LocalObject;
   RObj->Method1( LObj );
   Console::WriteLine( "Press Return to exit..." );
   Console::ReadLine();
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Serialization;
using System.Security.Permissions;

public class ObjRefExample {

   public static void Main() {

      ChannelServices.RegisterChannel(new HttpChannel(8090));

      WellKnownServiceTypeEntry wkste =
         new WellKnownServiceTypeEntry(typeof(RemoteObject),
                                       "RemoteObject",
                                       WellKnownObjectMode.Singleton);

      RemotingConfiguration.RegisterWellKnownServiceType( wkste );

      RemoteObject RObj =
         (RemoteObject)Activator.GetObject(typeof(RemoteObject),
                                           "http://localhost:8090/RemoteObject");

      LocalObject LObj = new LocalObject();

      RObj.Method1( LObj );

      Console.WriteLine("Press Return to exit...");
      Console.ReadLine();
   }
}

public class RemoteObject : MarshalByRefObject {

   public void Method1(LocalObject param) {
      Console.WriteLine("Invoked: Method1({0})", param);
   }
}
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Http
Imports System.Runtime.Remoting.Messaging
Imports System.Runtime.Serialization
Imports System.Security.Permissions

' code that drives the example
Public Class ObjRefExample

   <PermissionSet(SecurityAction.LinkDemand)> _
   Public Overloads Shared Sub Main()
      ChannelServices.RegisterChannel(New HttpChannel(8090))

      RemotingConfiguration.RegisterWellKnownServiceType(New WellKnownServiceTypeEntry(GetType(RemoteObject), "RemoteObject", WellKnownObjectMode.Singleton))

      Dim RObj As RemoteObject = CType(Activator.GetObject(GetType(RemoteObject), "http://localhost:8090/RemoteObject"), RemoteObject)
      Dim LObj As New LocalObject()

      RObj.Method1(LObj)

      Console.WriteLine("Press Return to exit...")

      Console.ReadLine()
   End Sub

End Class


' a simple remote object
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class RemoteObject
   Inherits MarshalByRefObject

   Public Sub Method1(ByVal param As LocalObject)
       Console.WriteLine("Invoked: Method1({0})", param)
   End Sub

End Class

Açıklamalar

Kayıtlı iyi bilinen bir nesnenin URI'sini bilen herhangi bir istemci, tercih ettiği kanalı ile ChannelServiceskaydederek ve veya yöntemini çağırarak newActivator.GetObject nesneyi etkinleştirerek nesne için bir proxy alabilir. ile newiyi bilinen bir nesneyi etkinleştirmek için, önce yöntemini kullanarak RegisterWellKnownClientType istemcide iyi bilinen nesne türünü kaydetmeniz gerekir. yöntemini çağırmak RegisterWellKnownClientType uzaktan iletişim altyapısına uzak nesnenin konumunu verir ve bu da anahtar sözcüğün bunu oluşturmasına new olanak tanır. Öte yandan, iyi bilinen nesneyi etkinleştirmek için yöntemini kullanırsanız Activator.GetObject , nesnenin URL'sini bağımsız değişken olarak sağlamanız gerekir, bu nedenle istemci ucunda önceden kayıt yapılması gerekmez.

Çağrı sunucuya ulaştığında, .NET Framework iletiden URI'yi ayıklar, URI ile eşleşen nesnenin başvurularını bulmak için uzaktan iletişim tablolarını inceler ve ardından gerekirse nesnenin örneğini oluşturur ve yöntem çağrısını nesnesine iletir. nesnesi olarak SingleCallkaydedilirse, yöntem çağrısı tamamlandıktan sonra yok edilir. adlı her yöntem için nesnenin yeni bir örneği oluşturulur. ile new arasındaki Activator.GetObject tek fark, ilkinin bir URL'yi parametre olarak belirtmenize izin vermesi ve ikincisinin url'yi yapılandırmadan almasıdır.

Uzak nesnenin kendisi kayıt işlemi tarafından örneklenmez. Bu yalnızca istemci nesnede bir yöntemi çağırmaya çalıştığında veya nesneyi istemci tarafından etkinleştirdiğinde gerçekleşir.

İyi bilinen nesnelerin ayrıntılı açıklaması için bkz. Sunucu Etkinleştirme.

Ayrıca bkz.

Şunlara uygulanır

RegisterWellKnownServiceType(Type, String, WellKnownObjectMode)

Yeni bir örneğini WellKnownServiceTypeEntrybaşlatmak için verilen parametreleri kullanarak hizmet ucundaki bir nesneyi Type iyi bilinen bir tür olarak kaydeder.

public:
 static void RegisterWellKnownServiceType(Type ^ type, System::String ^ objectUri, System::Runtime::Remoting::WellKnownObjectMode mode);
public static void RegisterWellKnownServiceType (Type type, string objectUri, System.Runtime.Remoting.WellKnownObjectMode mode);
static member RegisterWellKnownServiceType : Type * string * System.Runtime.Remoting.WellKnownObjectMode -> unit
Public Shared Sub RegisterWellKnownServiceType (type As Type, objectUri As String, mode As WellKnownObjectMode)

Parametreler

type
Type

nesnesi Type.

objectUri
String

Nesne URI'si.

mode
WellKnownObjectMode

İyi bilinen nesne türünün kaydedilmekte olan etkinleştirme modu. (Bkz. WellKnownObjectMode.)

Özel durumlar

Çağrı yığınındaki en üstteki arayanlardan en az birinin uzaktan iletişim türlerini ve kanallarını yapılandırma izni yoktur.

Örnekler

Aşağıdaki kod örneği, sunucudaki bir nesne türünün iyi bilinen bir nesne türü olarak kaydını gösterir. Sunulan sunucu koduna karşılık gelen istemci kodu için yöntemi örneğine RegisterWellKnownClientType bakın.

#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()
{
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

public class ServerClass {

    public static void Main()  {
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp


Public Class ServerClass
   
   Public Shared Sub Main()
ChannelServices::RegisterChannel( gcnew TcpChannel( 8082 ) );
RemotingConfiguration::ApplicationName = "HelloServiceApplication";
RemotingConfiguration::RegisterWellKnownServiceType( HelloService::typeid,
                                                     "MyUri",
                                                     WellKnownObjectMode::SingleCall );
ChannelServices.RegisterChannel(new TcpChannel(8082));

RemotingConfiguration.ApplicationName = "HelloServiceApplication";

RemotingConfiguration.RegisterWellKnownServiceType( typeof(HelloService),
                                                    "MyUri",
                                                    WellKnownObjectMode.SingleCall
                                                  );
ChannelServices.RegisterChannel(New TcpChannel(8082))

RemotingConfiguration.ApplicationName = "HelloServiceApplication"

RemotingConfiguration.RegisterWellKnownServiceType(GetType(HelloService), "MyUri", WellKnownObjectMode.SingleCall)
   Console::WriteLine( "Press enter to stop this process." );
   Console::ReadLine();
   return 0;
}

        Console.WriteLine("Press enter to stop this process.");
        Console.ReadLine();
    }
}

      Console.WriteLine("Press enter to stop this process.")
      Console.ReadLine()

   End Sub

End Class

Aşağıdaki kod örneği, yukarıdaki örnek kodda kayıtlı hizmet nesnesini gösterir.

#using <system.dll>

using namespace System;
public ref class HelloService: public MarshalByRefObject
{
private:
   static int n_instances;

public:
   HelloService()
   {
      n_instances++;
      Console::WriteLine( "" );
      Console::WriteLine( "HelloService activated - instance # {0}.", n_instances );
   }

   ~HelloService()
   {
      Console::WriteLine( "HelloService instance {0} destroyed.", n_instances );
      n_instances--;
   }

   String^ HelloMethod( String^ name )
   {
      Console::WriteLine( "HelloMethod called on HelloService instance {0}.", n_instances );
      return String::Format( "Hi there {0}.", name );
   }

};
using System;

public class HelloService : MarshalByRefObject {

    static int n_instances;

    public HelloService() {
        n_instances++;
        Console.WriteLine("");
        Console.WriteLine("HelloService activated - instance # {0}.", n_instances);
    }

    ~HelloService()  {
        Console.WriteLine("HelloService instance {0} destroyed.", n_instances);
        n_instances--;
    }

    public String HelloMethod(String name)  {

        Console.WriteLine("HelloMethod called on HelloService instance {0}.", n_instances);
        return "Hi there " + name + ".";
    }
}
Public Class HelloService
   Inherits MarshalByRefObject
   
   Private Shared n_instances As Integer
     
   Public Sub New()
      n_instances += 1
      Console.WriteLine("")
      Console.WriteLine("HelloService activated - instance # {0}.", n_instances)
   End Sub
   
   
   Protected Overrides Sub Finalize()
      Console.WriteLine("HelloService instance {0} destroyed.", n_instances)
      n_instances -= 1
      MyBase.Finalize()
   End Sub
   
   
   Public Function HelloMethod(name As [String]) As [String]
      Console.WriteLine("HelloMethod called on HelloService instance {0}.", n_instances)
      Return "Hi there " + name + "."
   End Function 'HelloMethod

End Class

Açıklamalar

Kayıtlı iyi bilinen bir nesnenin URI'sini bilen herhangi bir istemci, tercih ettiği kanalı ile ChannelServiceskaydederek ve veya yöntemini çağırarak newActivator.GetObject nesneyi etkinleştirerek nesne için bir proxy alabilir. ile newiyi bilinen bir nesneyi etkinleştirmek için, önce yöntemini kullanarak RegisterWellKnownClientType istemcide iyi bilinen nesne türünü kaydetmeniz gerekir. yöntemini çağırmak RegisterWellKnownClientType uzaktan iletişim altyapısına uzak nesnenin konumunu verir ve bu da anahtar sözcüğün bunu oluşturmasına new olanak tanır. Öte yandan, iyi bilinen nesneyi etkinleştirmek için yöntemini kullanırsanız Activator.GetObject , nesnenin URL'sini bağımsız değişken olarak sağlamanız gerekir, bu nedenle istemci ucunda önceden kayıt yapılması gerekmez.

Çağrı sunucuya ulaştığında, .NET Framework iletiden URI'yi ayıklar, URI ile eşleşen nesnenin başvurularını bulmak için uzaktan iletişim tablolarını inceler ve ardından gerekirse nesnenin örneğini oluşturur ve yöntem çağrısını nesnesine iletir. nesnesi olarak SingleCallkaydedilirse, yöntem çağrısı tamamlandıktan sonra yok edilir. adlı her yöntem için nesnenin yeni bir örneği oluşturulur. ile new arasındaki Activator.GetObject tek fark, ilkinin bir URL'yi parametre olarak belirtmenize izin vermesi ve ikincisinin url'yi yapılandırmadan almasıdır.

Uzak nesnenin kendisi kayıt işlemi tarafından örneklenmez. Bu yalnızca istemci nesnede bir yöntemi çağırmaya çalıştığında veya nesneyi istemci tarafından etkinleştirdiğinde gerçekleşir.

İyi bilinen nesnelerin ayrıntılı açıklaması için bkz. Sunucu Etkinleştirme.

Ayrıca bkz.

Şunlara uygulanır