RemotingConfiguration.RegisterWellKnownServiceType Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
İyi bilinen tür için yapılandırma ayarları.
Özel durumlar
Çağrı yığınında daha yüksek 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ı bir iyi bilinen nesnenin URI'sini bilen herhangi bir istemci, tercih ettiği kanalı ile ChannelServiceskaydederek ve veya Activator.GetObject yöntemini çağırarak new
nesneyi etkinleştirerek nesne için bir proxy alabilir. ile new
iyi 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 new
bunu oluşturmasına 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 gerekirse nesnenin örneğini oluşturur ve yöntem çağrısını nesneye iletir. Nesnesi olarak SingleCallkaydedilirse, yöntem çağrısı tamamlandıktan sonra yok edilir. adlı her yöntem için yeni bir nesne ö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 durum yalnızca bir 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
- objectUri
- String
Nesne URI'si.
- mode
- WellKnownObjectMode
Kayıtlı olan iyi bilinen nesne türünün etkinleştirme modu. (Bkz. WellKnownObjectMode.)
Özel durumlar
Çağrı yığınında daha yüksek 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öntem ö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ı bir iyi bilinen nesnenin URI'sini bilen herhangi bir istemci, tercih ettiği kanalı ile ChannelServiceskaydederek ve veya Activator.GetObject yöntemini çağırarak new
nesneyi etkinleştirerek nesne için bir proxy alabilir. ile new
iyi 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 new
bunu oluşturmasına 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 gerekirse nesnenin örneğini oluşturur ve yöntem çağrısını nesneye iletir. Nesnesi olarak SingleCallkaydedilirse, yöntem çağrısı tamamlandıktan sonra yok edilir. adlı her yöntem için yeni bir nesne ö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 durum yalnızca bir 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.