IServerChannelSink.AsyncProcessResponse 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
보내진 메서드 호출에 대한 응답을 현재 싱크에서 비동기식으로 처리하도록 요청합니다.
public:
void AsyncProcessResponse(System::Runtime::Remoting::Channels::IServerResponseChannelSinkStack ^ sinkStack, System::Object ^ state, System::Runtime::Remoting::Messaging::IMessage ^ msg, System::Runtime::Remoting::Channels::ITransportHeaders ^ headers, System::IO::Stream ^ stream);
public void AsyncProcessResponse (System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack sinkStack, object state, System.Runtime.Remoting.Messaging.IMessage msg, System.Runtime.Remoting.Channels.ITransportHeaders headers, System.IO.Stream stream);
[System.Security.SecurityCritical]
public void AsyncProcessResponse (System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack sinkStack, object state, System.Runtime.Remoting.Messaging.IMessage msg, System.Runtime.Remoting.Channels.ITransportHeaders headers, System.IO.Stream stream);
abstract member AsyncProcessResponse : System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack * obj * System.Runtime.Remoting.Messaging.IMessage * System.Runtime.Remoting.Channels.ITransportHeaders * System.IO.Stream -> unit
[<System.Security.SecurityCritical>]
abstract member AsyncProcessResponse : System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack * obj * System.Runtime.Remoting.Messaging.IMessage * System.Runtime.Remoting.Channels.ITransportHeaders * System.IO.Stream -> unit
Public Sub AsyncProcessResponse (sinkStack As IServerResponseChannelSinkStack, state As Object, msg As IMessage, headers As ITransportHeaders, stream As Stream)
매개 변수
- sinkStack
- IServerResponseChannelSinkStack
서버 전송 싱크로 다시 향하는 싱크 스택입니다.
- state
- Object
이 싱크와 관련된 요청쪽에서 생성된 정보입니다.
- msg
- IMessage
응답 메시지입니다.
- headers
- ITransportHeaders
클라이언트로 보내는 반환 메시지 머리글에 추가할 헤더입니다.
- stream
- Stream
전송 싱크로 다시 향하는 스트림입니다.
- 특성
예외
직접 실행 호출자에 인프라 권한이 없는 경우
예제
[PermissionSet(SecurityAction::Demand, Name="FullTrust")]
private ref class LoggingServerChannelSink: public BaseChannelObjectWithProperties, public IServerChannelSink
{
private:
IServerChannelSink^ nextSink2;
bool bEnabled2;
public:
LoggingServerChannelSink()
: nextSink2( nullptr ), bEnabled2( true )
{}
LoggingServerChannelSink( IServerChannelSink^ localNextSink )
: BaseChannelObjectWithProperties()
{
nextSink2 = localNextSink;
}
virtual ServerProcessing ProcessMessage( IServerChannelSinkStack^ sinkStack, IMessage^ requestMsg, ITransportHeaders^ requestHeaders, Stream^ requestStream, [Out]IMessage^% responseMsg, [Out]ITransportHeaders^% responseHeaders, [Out]Stream^% responseStream ) = IServerChannelSink::ProcessMessage
{
if ( bEnabled2 )
{
Console::WriteLine( "----------Request Headers-----------" );
Console::WriteLine( "{0}:{1}", CommonTransportKeys::IPAddress,
requestHeaders[ CommonTransportKeys::IPAddress ] );
Console::WriteLine( "{0}:{1}", CommonTransportKeys::ConnectionId,
requestHeaders[ CommonTransportKeys::ConnectionId ] );
Console::WriteLine( "{0}:{1}", CommonTransportKeys::RequestUri,
requestHeaders[ CommonTransportKeys::RequestUri ] );
}
sinkStack->Push( this, nullptr );
ServerProcessing processing = nextSink2->ProcessMessage( sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream );
switch ( processing )
{
case ServerProcessing::Complete:
sinkStack->Pop( this );
break;
case ServerProcessing::OneWay:
sinkStack->Pop( this );
break;
case ServerProcessing::Async:
sinkStack->Store( this, nullptr );
break;
}
return processing;
}
virtual void AsyncProcessResponse( IServerResponseChannelSinkStack^ sinkStack, Object^ /*state*/, IMessage^ msg, ITransportHeaders^ headers, Stream^ stream1 )
{
sinkStack->AsyncProcessResponse( msg, headers, stream1 );
}
virtual Stream^ GetResponseStream( IServerResponseChannelSinkStack^ /*sinkStack*/, Object^ /*state*/, IMessage^ /*msg*/, ITransportHeaders^ /*headers*/ )
{
return nullptr;
}
property IServerChannelSink^ NextChannelSink
{
virtual IServerChannelSink^ get()
{
return nextSink2;
}
}
};
[PermissionSet(SecurityAction::Demand, Name="FullTrust")]
public ref class LoggingServerChannelSinkProvider: public IServerChannelSinkProvider
{
private:
IServerChannelSinkProvider^ next2;
public:
LoggingServerChannelSinkProvider()
: next2( nullptr )
{}
LoggingServerChannelSinkProvider( IDictionary^ /*properties*/, ICollection^ /*providerData*/ ){}
virtual void GetChannelData( IChannelDataStore^ /*channelData*/ ){}
virtual IServerChannelSink^ CreateSink( IChannelReceiver^ channel1 )
{
IServerChannelSink^ localNextSink = nullptr;
if ( next2 != nullptr )
localNextSink = next2->CreateSink( channel1 );
return gcnew LoggingServerChannelSink( localNextSink );
}
property IServerChannelSinkProvider^ Next
{
virtual IServerChannelSinkProvider^ get()
{
return next2;
}
virtual void set( IServerChannelSinkProvider^ value )
{
next2 = value;
}
}
};
}
public class LoggingServerChannelSinkProvider : IServerChannelSinkProvider
{
private IServerChannelSinkProvider next2 = null;
public LoggingServerChannelSinkProvider(IDictionary properties, ICollection providerData)
{
}
public void GetChannelData(IChannelDataStore channelData)
{
}
public IServerChannelSink CreateSink(IChannelReceiver channel1)
{
IServerChannelSink localNextSink = null;
if (next2 != null)
localNextSink = next2.CreateSink(channel1);
return new LoggingServerChannelSink(localNextSink);
}
public IServerChannelSinkProvider Next
{
get
{
return next2;
}
set
{
next2 = value;
}
}
}
internal class LoggingServerChannelSink : BaseChannelObjectWithProperties, IServerChannelSink
{
private IServerChannelSink nextSink2 = null;
private bool bEnabled2 = true;
public LoggingServerChannelSink(IServerChannelSink localNextSink) : base()
{
nextSink2 = localNextSink;
}
public ServerProcessing ProcessMessage( IServerChannelSinkStack sinkStack,
IMessage requestMsg,
ITransportHeaders requestHeaders,
Stream requestStream,
out IMessage responseMsg,
out ITransportHeaders responseHeaders,
out Stream responseStream
)
{
if (bEnabled2)
{
Console.WriteLine("----------Request Headers-----------");
Console.WriteLine( CommonTransportKeys.IPAddress + ":" +
requestHeaders[CommonTransportKeys.IPAddress]);
Console.WriteLine( CommonTransportKeys.ConnectionId + ":" +
requestHeaders[CommonTransportKeys.ConnectionId]);
Console.WriteLine( CommonTransportKeys.RequestUri + ":" +
requestHeaders[CommonTransportKeys.RequestUri]);
}
sinkStack.Push(this, null);
ServerProcessing processing =
nextSink2.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg,
out responseHeaders, out responseStream);
switch (processing)
{
case ServerProcessing.Complete :
{
sinkStack.Pop(this);
break;
}
case ServerProcessing.OneWay:
{
sinkStack.Pop(this);
break;
}
case ServerProcessing.Async:
{
sinkStack.Store(this, null);
break;
}
}
return processing;
}
public void AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, Object state,
IMessage msg, ITransportHeaders headers, Stream stream1)
{
sinkStack.AsyncProcessResponse(msg, headers, stream1);
}
public Stream GetResponseStream(IServerResponseChannelSinkStack sinkStack, Object state,
IMessage msg, ITransportHeaders headers)
{
return null;
}
public IServerChannelSink NextChannelSink
{
get
{
return nextSink2;
}
}
}
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class LoggingServerChannelSinkProvider
Implements IServerChannelSinkProvider
Private next2 As IServerChannelSinkProvider = Nothing
Public Sub New(properties As IDictionary, providerData As ICollection)
End Sub
Public Sub GetChannelData(channelData As IChannelDataStore) _
Implements IServerChannelSinkProvider.GetChannelData
End Sub
Public Function CreateSink(channel1 As IChannelReceiver) As IServerChannelSink _
Implements IServerChannelSinkProvider.CreateSink
Dim localNextSink As IServerChannelSink = Nothing
If Not (next2 Is Nothing) Then
localNextSink = next2.CreateSink(channel1)
End If
Return New LoggingServerChannelSink(localNextSink)
End Function 'CreateSink
Public Property [Next]() As IServerChannelSinkProvider Implements _
IServerChannelSinkProvider.Next
Get
Return next2
End Get
Set
next2 = value
End Set
End Property
End Class
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Friend Class LoggingServerChannelSink
Inherits BaseChannelObjectWithProperties
Implements IServerChannelSink
Private nextSink2 As IServerChannelSink = Nothing
Private bEnabled2 As Boolean = True
Public Sub New(localNextSink As IServerChannelSink)
MyBase.new()
nextSink2 = localNextSink
End Sub
Public Function ProcessMessage( ByVal sinkStack As IServerChannelSinkStack, _
ByVal requestMsg As IMessage, _
ByVal requestHeaders As ITransportHeaders, _
ByVal requestStream As Stream, _
<Out> ByRef responseMsg As IMessage, _
<Out> ByRef responseHeaders As ITransportHeaders, _
<Out> ByRef responseStream As Stream _
) As ServerProcessing _
Implements IServerChannelSink.ProcessMessage
If bEnabled2 Then
Console.WriteLine("----------Request Headers-----------")
Console.WriteLine(CommonTransportKeys.IPAddress.ToString() + ":" + _
requestHeaders(CommonTransportKeys.IPAddress).ToString())
Console.WriteLine(CommonTransportKeys.ConnectionId.ToString() + ":" + _
requestHeaders(CommonTransportKeys.ConnectionId).ToString())
Console.WriteLine(CommonTransportKeys.RequestUri.ToString() + ":" + _
requestHeaders(CommonTransportKeys.RequestUri).ToString())
End If
sinkStack.Push(Me, Nothing)
Dim processing As ServerProcessing = _
nextSink2.ProcessMessage _
(sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream)
Select Case processing
Case ServerProcessing.Complete
sinkStack.Pop(Me)
Case ServerProcessing.OneWay
sinkStack.Pop(Me)
Case ServerProcessing.Async
sinkStack.Store(Me, Nothing)
End Select
Return processing
End Function 'ProcessMessage
Public Sub AsyncProcessResponse(sinkStack As IServerResponseChannelSinkStack, _
state As Object, msg As IMessage, headers As ITransportHeaders, stream1 As Stream) _
Implements IServerChannelSink.AsyncProcessResponse
sinkStack.AsyncProcessResponse(msg, headers, stream1)
End Sub
Public Function GetResponseStream(sinkStack As IServerResponseChannelSinkStack, _
state As Object, msg As IMessage, headers As ITransportHeaders) As Stream _
Implements IServerChannelSink.GetResponseStream
Return Nothing
End Function 'GetResponseStream
Public ReadOnly Property NextChannelSink() As IServerChannelSink _
Implements IServerChannelSink.NextChannelSink
Get
Return nextSink2
End Get
End Property
Public Overrides ReadOnly Property Properties() As Collections.IDictionary _
Implements IServerChannelSink.Properties
Get
return nothing
End Get
End Property
End Class
설명
state
매개 변수는 채널 싱크 스택으로 푸시되 된 현재 싱크와 관련 된 정보를 포함 합니다.
적용 대상
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET