IServerChannelSinkとは? わかりやすく解説

IServerChannelSink インターフェイス

セキュリティ シンクおよび転送シンクのために使用するメソッドを提供します。

名前空間: System.Runtime.Remoting.Channels
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<ComVisibleAttribute(True)> _
Public Interface IServerChannelSink
    Inherits IChannelSinkBase
Dim instance As IServerChannelSink
[ComVisibleAttribute(true)] 
public interface IServerChannelSink : IChannelSinkBase
[ComVisibleAttribute(true)] 
public interface class IServerChannelSink :
 IChannelSinkBase
/** @attribute ComVisibleAttribute(true) */ 
public interface IServerChannelSink extends IChannelSinkBase
ComVisibleAttribute(true) 
public interface IServerChannelSink extends
 IChannelSinkBase
解説解説
使用例使用例

IServerChannelSink インターフェイスの実装を示すコード例を次に示します。

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;
    }


}
using namespace System::Runtime::InteropServices;
using namespace System;
using namespace System::Collections;
using namespace System::IO;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Messaging;

[System::Security::Permissions::PermissionSet(System::Security::
   Permissions::SecurityAction::Demand, Name = "FullTrust")]
public ref class ServerSink: public
 BaseChannelSinkWithProperties, public IServerChannelSink
{
private:

   // This class inherits from BaseChannelSinkWithPropertes
   // to get an implementation of IChannelSinkBase.
   // The next sink in the chain.
   IServerChannelSink^ nextSink;

public:
   property IServerChannelSink^ NextChannelSink 
   {
      virtual IServerChannelSink^ get()
      {
         return (nextSink);
      }
   }

   virtual Stream^ GetResponseStream( IServerResponseChannelSinkStack^ /*sinkStack*/,
 Object^ /*state*/, IMessage^ /*message*/, ITransportHeaders^ /*responseHeaders*/
 )
   {
      return nullptr;
   }

   virtual 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, nullptr );
      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).Properties;
      IEnumerator^ myEnum = dictionary->Keys->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Object^ key = safe_cast<Object^>(myEnum->Current);
         Console::WriteLine( "{0} = {1}", key, dictionary[ key ] );
      }

      Console::WriteLine( "---------------------------------" );
      return (status);
   }

   virtual void AsyncProcessResponse( IServerResponseChannelSinkStack^
 /*sinkStack*/, Object^ /*state*/, IMessage^ /*message*/, ITransportHeaders^ /*responseHeaders*/,
 Stream^ /*responseStream*/ )
   {
      throw gcnew NotImplementedException;
   }

   property System::Collections::IDictionary^ Properties 
   {
      virtual System::Collections::IDictionary^ get() override
      {
         return (dynamic_cast<BaseChannelSinkWithProperties^>(this))->Properties;
      }
   }

   // Constructor
   ServerSink( IServerChannelSink^ sink )
   {
      if ( sink == nullptr )
            throw gcnew 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

対応するサーバー シンク プロバイダの実装例については、IServerChannelSinkProvider インターフェイスのドキュメントを参照してください。

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
IServerChannelSink メンバ
System.Runtime.Remoting.Channels 名前空間

IServerChannelSink プロパティ


IServerChannelSink メソッド


パブリック メソッドパブリック メソッド

  名前 説明
パブリック メソッド AsyncProcessResponse 非同期に送信されたメソッド呼び出しに対する応答については、現在のシンクから処理を行うように要求します。
パブリック メソッド GetResponseStream 指定した応答メッセージがシリアル化される対象の Stream を返します。
パブリック メソッド ProcessMessage 現在のシンクからのメッセージ処理を要求します。
参照参照

関連項目

IServerChannelSink インターフェイス
System.Runtime.Remoting.Channels 名前空間

IServerChannelSink メンバ




英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「IServerChannelSink」の関連用語

IServerChannelSinkのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



IServerChannelSinkのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS