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ı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 new
Activator.GetObject 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 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
- 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 new
Activator.GetObject 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 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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin