//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.ServiceModel.Channels { delegate void BinderExceptionHandler(IReliableChannelBinder sender, Exception exception); interface IReliableChannelBinder { bool CanSendAsynchronously { get; } IChannel Channel { get; } bool Connected { get; } TimeSpan DefaultSendTimeout { get; } bool HasSession { get; } EndpointAddress LocalAddress { get; } EndpointAddress RemoteAddress { get; } CommunicationState State { get; } event BinderExceptionHandler Faulted; event BinderExceptionHandler OnException; void Abort(); void Close(TimeSpan timeout); void Close(TimeSpan timeout, MaskingMode maskingMode); IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state); IAsyncResult BeginClose(TimeSpan timeout, MaskingMode maskingMode, AsyncCallback callback, object state); void EndClose(IAsyncResult result); void Open(TimeSpan timeout); IAsyncResult BeginOpen(TimeSpan timeout, AsyncCallback callback, object state); void EndOpen(IAsyncResult result); IAsyncResult BeginSend(Message message, TimeSpan timeout, MaskingMode maskingMode, AsyncCallback callback, object state); IAsyncResult BeginSend(Message message, TimeSpan timeout, AsyncCallback callback, object state); void EndSend(IAsyncResult result); void Send(Message message, TimeSpan timeout); void Send(Message message, TimeSpan timeout, MaskingMode maskingMode); bool TryReceive(TimeSpan timeout, out RequestContext requestContext); bool TryReceive(TimeSpan timeout, out RequestContext requestContext, MaskingMode maskingMode); IAsyncResult BeginTryReceive(TimeSpan timeout, AsyncCallback callback, object state); IAsyncResult BeginTryReceive(TimeSpan timeout, MaskingMode maskingMode, AsyncCallback callback, object state); bool EndTryReceive(IAsyncResult result, out RequestContext requestContext); ISession GetInnerSession(); void HandleException(Exception e); bool IsHandleable(Exception e); void SetMaskingMode(RequestContext context, MaskingMode maskingMode); RequestContext WrapRequestContext(RequestContext context); } interface IClientReliableChannelBinder : IReliableChannelBinder { Uri Via { get; } event EventHandler ConnectionLost; bool EnsureChannelForRequest(); IAsyncResult BeginRequest(Message message, TimeSpan timeout, AsyncCallback callback, object state); IAsyncResult BeginRequest(Message message, TimeSpan timeout, MaskingMode maskingMode, AsyncCallback callback, object state); Message EndRequest(IAsyncResult result); Message Request(Message message, TimeSpan timeout); Message Request(Message message, TimeSpan timeout, MaskingMode maskingMode); } interface IServerReliableChannelBinder : IReliableChannelBinder { bool AddressResponse(Message request, Message response); bool UseNewChannel(IChannel channel); IAsyncResult BeginWaitForRequest(TimeSpan timeout, AsyncCallback callback, object state); bool EndWaitForRequest(IAsyncResult result); bool WaitForRequest(TimeSpan timeout); } }