IServerChannelSink インターフェイス
アセンブリ: mscorlib (mscorlib.dll 内)


チャネル シンクは、そのチャネルを流れている基になるメッセージにアクセスできるようにするプラグイン ポイント、およびリモート オブジェクトにメッセージを送信するためにトランスポート機構が使用するストリームを提供します。チャネル シンクは互いにリンクされてチャネル シンク プロバイダのチェインとなり、すべてのチャネル メッセージはこのシンク チェインを流れた後で、メッセージがシリアル化されてトランスポートされます。

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 インターフェイスのドキュメントを参照してください。


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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


IServerChannelSink プロパティ
IServerChannelSink メソッド

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

IServerChannelSink メンバ
- IServerChannelSinkのページへのリンク