IServerChannelSinkProvider-Schnittstelle
Erstellt Serverchannelempfänger für den Serverchannel, über den Remotemeldungen übertragen werden.
Namespace: System.Runtime.Remoting.Channels
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<ComVisibleAttribute(True)> _
Public Interface IServerChannelSinkProvider
'Usage
Dim instance As IServerChannelSinkProvider
[ComVisibleAttribute(true)]
public interface IServerChannelSinkProvider
[ComVisibleAttribute(true)]
public interface class IServerChannelSinkProvider
/** @attribute ComVisibleAttribute(true) */
public interface IServerChannelSinkProvider
ComVisibleAttribute(true)
public interface IServerChannelSinkProvider
Hinweise
Channelsenken sind über Implementierungen der IServerChannelSinkProvider-Schnittstelle mit einem Serverchannel verbunden. Sämtliche Remoteserverchannel stellen Konstruktoren bereit, die IServerChannelSinkProvider als Parameter annehmen.
Da Channelsenkenanbieter in einer Kette gespeichert werden, müssen sämtliche Channelsenkenanbieter verkettet werden, bevor der außen befindliche an den Channelkonstruktor übergeben wird. IServerChannelSinkProvider stellt für diesen Zweck die Next-Eigenschaft bereit.
Wenn in einer Konfigurationsdatei mehrere Channelempfängerprovider angegeben sind, werden diese von der Remotinginfrastruktur in der Reihenfolge verkettet, in der sie in der Konfigurationsdatei gefunden werden. Die Channelsenkenanbieter werden während eines Aufrufs von RemotingConfiguration.Configure gleichzeitig mit dem Channel erstellt.
Nach dem Generieren von IMethodCallMessage sucht .NET Framework in der Liste registrierter Channel einen Channel, der den Aufruf verarbeiten kann. Wenn ein entsprechender Channel gefunden wurde, wird die Channelsenke aus dem Channel abgerufen, und die IMethodCallMessage wird zur Verarbeitung an die Senke weitergeleitet.
Beispiel
Im folgenden Codebeispiel wird eine Implementierung dieser Schnittstelle veranschaulicht.
public class ServerSinkProvider : IServerChannelSinkProvider
{
// The next provider in the chain.
private IServerChannelSinkProvider nextProvider;
public IServerChannelSinkProvider Next
{
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
get
{
return(nextProvider);
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
set
{
nextProvider = value;
}
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public IServerChannelSink CreateSink (IChannelReceiver channel)
{
Console.WriteLine("Creating ServerSink");
// Create the next sink in the chain.
IServerChannelSink nextSink = nextProvider.CreateSink(channel);
// Hook our sink up to it.
return( new ServerSink(nextSink) );
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public void GetChannelData (IChannelDataStore channelData) {}
// This constructor is required in order to use the provider in file-based configuration.
// It need not do anything unless you want to use the information in the parameters.
public ServerSinkProvider (IDictionary properties, ICollection providerData) {}
}
[System::Security::Permissions::PermissionSet(System::Security::
Permissions::SecurityAction::Demand, Name = "FullTrust")]
public ref class ServerSinkProvider: public IServerChannelSinkProvider
{
// The next provider in the chain.
private:
IServerChannelSinkProvider^ nextProvider;
public:
property IServerChannelSinkProvider^ Next
{
virtual IServerChannelSinkProvider^ get()
{
return (nextProvider);
}
virtual void set( IServerChannelSinkProvider^ value )
{
nextProvider = value;
}
}
virtual IServerChannelSink^ CreateSink( IChannelReceiver^ channel )
{
Console::WriteLine( "Creating ServerSink" );
// Create the next sink in the chain.
IServerChannelSink^ nextSink = nextProvider->CreateSink( channel );
// Hook our sink up to it.
return (gcnew ServerSink( nextSink ));
}
virtual void GetChannelData( IChannelDataStore^ /*channelData*/ ){}
// This constructor is required in order to use the provider in file-based configuration.
// It need not do anything unless you want to use the information in the parameters.
ServerSinkProvider( IDictionary^ /*properties*/, ICollection^ /*providerData*/ ){}
};
/** @attribute SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)
*/
public class ServerSinkProvider implements IServerChannelSinkProvider
{
// The next provider in the chain.
private IServerChannelSinkProvider nextProvider;
/** @property
*/
public IServerChannelSinkProvider get_Next()
{
return nextProvider;
}//get_Next
/** @property
*/
public void set_Next(IServerChannelSinkProvider value)
{
nextProvider = value;
}//set_Next
public IServerChannelSink CreateSink(IChannelReceiver channel)
{
Console.WriteLine("Creating ServerSink");
// Create the next sink in the chain.
IServerChannelSink nextSink = nextProvider.CreateSink(channel);
// Hook our sink up to it.
return new ServerSink(nextSink);
} //CreateSink
public void GetChannelData(IChannelDataStore channelData)
{
} //GetChannelData
// This constructor is required in order to use the provider in file-based
//configuration. It need not do anything unless you want to use the
// information in the parameters.
public ServerSinkProvider(IDictionary properties, ICollection providerData)
{
} //ServerSinkProvider
} //ServerSinkProvider
Ein Beispiel für die entsprechende Implementierung einer Serversenke finden Sie in der Dokumentation der IServerChannelSink-Schnittstelle.
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
IServerChannelSinkProvider-Member
System.Runtime.Remoting.Channels-Namespace