1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System;
using System.Collections.Generic;
using System.ServiceModel;
class ContextReplySessionChannel : LayeredChannel<IReplySessionChannel>, IReplySessionChannel
{
ContextProtocol contextProtocol;
public ContextReplySessionChannel(ChannelManagerBase channelManager, IReplySessionChannel innerChannel, ContextExchangeMechanism contextExchangeMechanism)
: base(channelManager, innerChannel)
{
this.contextProtocol = new ServiceContextProtocol(contextExchangeMechanism);
}
public EndpointAddress LocalAddress
{
get { return this.InnerChannel.LocalAddress; }
}
public IInputSession Session
{
get { return this.InnerChannel.Session; }
}
public IAsyncResult BeginReceiveRequest(TimeSpan timeout, AsyncCallback callback, object state)
{
return this.InnerChannel.BeginReceiveRequest(timeout, callback, state);
}
public IAsyncResult BeginReceiveRequest(AsyncCallback callback, object state)
{
return this.InnerChannel.BeginReceiveRequest(callback, state);
}
public IAsyncResult BeginTryReceiveRequest(TimeSpan timeout, AsyncCallback callback, object state)
{
return this.InnerChannel.BeginTryReceiveRequest(timeout, callback, state);
}
public IAsyncResult BeginWaitForRequest(TimeSpan timeout, AsyncCallback callback, object state)
{
return this.InnerChannel.BeginWaitForRequest(timeout, callback, state);
}
public RequestContext EndReceiveRequest(IAsyncResult result)
{
RequestContext innerContext = this.InnerChannel.EndReceiveRequest(result);
if (innerContext == null)
{
return null;
}
else
{
return this.CreateContextChannelRequestContext(innerContext);
}
}
public bool EndTryReceiveRequest(IAsyncResult result, out RequestContext context)
{
context = null;
RequestContext innerContext;
if (this.InnerChannel.EndTryReceiveRequest(result, out innerContext))
{
if (innerContext != null)
{
context = this.CreateContextChannelRequestContext(innerContext);
}
return true;
}
else
{
return false;
}
}
public bool EndWaitForRequest(IAsyncResult result)
{
return this.InnerChannel.EndWaitForRequest(result);
}
public RequestContext ReceiveRequest(TimeSpan timeout)
{
RequestContext innerContext = this.InnerChannel.ReceiveRequest(timeout);
if (innerContext == null)
{
return null;
}
else
{
return this.CreateContextChannelRequestContext(innerContext);
}
}
public RequestContext ReceiveRequest()
{
RequestContext innerContext = this.InnerChannel.ReceiveRequest();
if (innerContext == null)
{
return null;
}
else
{
return this.CreateContextChannelRequestContext(innerContext);
}
}
public bool TryReceiveRequest(TimeSpan timeout, out RequestContext context)
{
RequestContext innerContext;
if (this.InnerChannel.TryReceiveRequest(timeout, out innerContext))
{
context = this.CreateContextChannelRequestContext(innerContext);
return true;
}
else
{
context = null;
return false;
}
}
public bool WaitForRequest(TimeSpan timeout)
{
return this.InnerChannel.WaitForRequest(timeout);
}
ContextChannelRequestContext CreateContextChannelRequestContext(RequestContext innerContext)
{
this.contextProtocol.OnIncomingMessage(innerContext.RequestMessage);
return new ContextChannelRequestContext(innerContext, this.contextProtocol, this.DefaultSendTimeout);
}
}
}
|