(0) exportieren Drucken
Alle erweitern

IServerChannelSink-Schnittstelle

Aktualisiert: November 2007

Stellt Methoden bereit, die für die Sicherheit und für Transportempfänger verwendet werden.

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

[ComVisibleAttribute(true)]
public interface IServerChannelSink : IChannelSinkBase
/** @attribute ComVisibleAttribute(true) */
public interface IServerChannelSink extends IChannelSinkBase
public interface IServerChannelSink extends IChannelSinkBase

Channelempfänger stellen einen Plug-In-Punkt bereit, der den Zugriff auf die zugrunde liegenden, über den Channel übermittelten Meldungen sowie auf den Stream ermöglicht, der vom Übertragungsmechanismus zum Senden von Meldungen an ein Remoteobjekt verwendet wird. Channelempfänger sind in einer Kette von Channelempfängerprovidern miteinander verknüpft, und alle Channelmeldungen werden über diese Kette von Empfängern geleitet, bevor die Meldung serialisiert und übertragen wird.

Im folgenden Codebeispiel wird eine Implementierung der IServerChannelSink-Schnittstelle veranschaulicht.

using System;
using System.Collections;
using System.IO;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Messaging;
using System.Security.Permissions;

public class ServerSink : BaseChannelSinkWithProperties, IServerChannelSink
{

    // This class inherits from BaseChannelSinkWithPropertes
    // to get an implementation of IChannelSinkBase.


    // The next sink in the chain.
    private IServerChannelSink nextSink;

    public IServerChannelSink NextChannelSink
    {
        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
        get
        {
            return(nextSink);
        }
    }

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
    public Stream GetResponseStream (IServerResponseChannelSinkStack sinkStack,
                                     Object state,
                                     IMessage message,
                                     ITransportHeaders responseHeaders)
    {
        return(null);
    }

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
    public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
                                            IMessage requestMessage,
                                            ITransportHeaders requestHeaders,
                                            Stream requestStream,
                                            out IMessage responseMessage,
                                            out ITransportHeaders responseHeaders,
                                            out Stream responseStream)
    {

        // Hand off to the next sink for processing.
        sinkStack.Push(this, null);
        ServerProcessing status = nextSink.ProcessMessage(
          sinkStack, requestMessage, requestHeaders, requestStream,
          out responseMessage, out responseHeaders, out responseStream
        );

        // Print the response message properties.
        Console.WriteLine("---- Message from the server ----");
        IDictionary dictionary = responseMessage.Properties;
        foreach (Object key in dictionary.Keys)
        {
            Console.WriteLine("{0} = {1}", key, dictionary[key]);
        }
        Console.WriteLine("---------------------------------");

        return(status);
    } 

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)]
    public void AsyncProcessResponse (IServerResponseChannelSinkStack sinkStack,
                                      Object state,
                                      IMessage message,
                                      ITransportHeaders responseHeaders,
                                      Stream responseStream)
    {
        throw new NotImplementedException();
    }

    // Constructor
    [SecurityPermission(SecurityAction.LinkDemand)]
    public ServerSink (IServerChannelSink sink) {
      if (sink == null) throw new ArgumentNullException("sink");
      nextSink = sink;
    }


}


import System.*;
import System.Collections.*;
import System.IO.*;
import System.Runtime.Remoting.Channels.*;
import System.Runtime.Remoting.Messaging.*;
import System.Security.Permissions.*;

/** @attribute SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)
*/
public class ServerSink extends BaseChannelSinkWithProperties 
    implements IServerChannelSink
{
    // This class inherits from BaseChannelSinkWithPropertes
    // to get an implementation of IChannelSinkBase.
    // The next sink in the chain.
    private IServerChannelSink nextSink;

    /** @property 
     */
    public IServerChannelSink get_NextChannelSink()
    {
        return nextSink;
    } //get_NextChannelSink

    public Stream GetResponseStream(IServerResponseChannelSinkStack sinkStack, 
        Object state, IMessage message, ITransportHeaders responseHeaders)
    {
        return null;
    } //GetResponseStream

    public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, 
        IMessage requestMessage, ITransportHeaders requestHeaders,
        Stream requestStream,/** @ref */ IMessage responseMessage, 
        /** @ref */ ITransportHeaders responseHeaders,
        /** @ref */ Stream responseStream)
    {
        // Hand off to the next sink for processing.
        sinkStack.Push(this, null);
        ServerProcessing status = nextSink.ProcessMessage(sinkStack, 
            requestMessage, requestHeaders, requestStream,responseMessage, 
            responseHeaders, responseStream);
        // Print the response message properties.
        Console.WriteLine("---- Message from the server ----");
        IDictionary dictionary = responseMessage.get_Properties();
        Object key = null;
        IEnumerator objEnum = dictionary.get_Keys().GetEnumerator();
        while (objEnum.MoveNext()) {
            key = objEnum.get_Current();
            System.Console.WriteLine("{0} = {1}", key, dictionary.get_Item(key));
        }
        System.Console.WriteLine("---------------------------------");
        return status;
    } //ProcessMessage

    public void AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack,
        Object state, IMessage message, ITransportHeaders responseHeaders, 
        Stream responseStream) throws NotImplementedException
    {
        throw new NotImplementedException();
    } //AsyncProcessResponse

    // Constructor
    public ServerSink(IServerChannelSink sink)
    {
        if (sink == null) {
            throw new ArgumentNullException("sink");
        }
        nextSink = sink;
    } //ServerSink
} //ServerSink


Ein Beispiel für die entsprechende Implementierung eines Serversenkenanbieters finden Sie in der Dokumentation der IServerChannelSinkProvider-Schnittstelle.

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

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft