File: System\ServiceModel\Channels\IReliableChannelBinder.cs
Web Access
Project: src\src\System.ServiceModel.Primitives\src\System.ServiceModel.Primitives.csproj (System.ServiceModel.Primitives)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Threading.Tasks;
 
namespace System.ServiceModel.Channels
{
    internal delegate void BinderExceptionHandler(IReliableChannelBinder sender, Exception exception);
 
    internal interface IReliableChannelBinder
    {
        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();
 
        Task CloseAsync(TimeSpan timeout);
        Task CloseAsync(TimeSpan timeout, MaskingMode maskingMode);
        Task OpenAsync(TimeSpan timeout);
        Task SendAsync(Message message, TimeSpan timeout);
        Task SendAsync(Message message, TimeSpan timeout, MaskingMode maskingMode);
 
        Task<(bool success, RequestContext requestContext)> TryReceiveAsync(TimeSpan timeout);
        Task<(bool success, RequestContext requestContext)> TryReceiveAsync(TimeSpan timeout, MaskingMode maskingMode);
 
        ISession GetInnerSession();
        void HandleException(Exception e);
        bool IsHandleable(Exception e);
        void SetMaskingMode(RequestContext context, MaskingMode maskingMode);
        RequestContext WrapRequestContext(RequestContext context);
    }
 
    internal interface IClientReliableChannelBinder : IReliableChannelBinder
    {
        Uri Via { get; }
        event EventHandler ConnectionLost;
 
        Task<bool> EnsureChannelForRequestAsync();
 
        Task<Message> RequestAsync(Message message, TimeSpan timeout);
        Task<Message> RequestAsync(Message message, TimeSpan timeout, MaskingMode maskingMode);
    }
}