WCF技术内幕 第6章(4)

本文详细介绍了请求/应答消息交换模式中的IRequestChannel和IReplyChannel接口,这两种接口是实现服务间通信的基础。IRequestChannel负责发送请求并接收响应,而IReplyChannel则用于接收请求并向客户端发送响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请求/应答通道:IRequestChannel和IReplyChannel

在请求/应答消息交换模式里,消息的参与者都要发送和接收消息。发送者发送消息给接收者,然后等待回复;接收者接收请求消息,然后发送一个回复消息。

    public interface IRequestChannel : IChannel, ICommunicationObject
    {
        EndpointAddress RemoteAddress { get; }
        Uri Via { get; }

        IAsyncResult BeginRequest(Message message, AsyncCallback callback, object state);
        IAsyncResult BeginRequest(Message message, TimeSpan timeout, AsyncCallback callback, object state);
        Message EndRequest(IAsyncResult result);
        Message Request(Message message);
        Message Request(Message message, TimeSpan timeout);
    }

Request方法接收Message类型的参数,然后返回Message类型的实例。

    public interface IReplyChannel : IChannel, ICommunicationObject
    {
        EndpointAddress LocalAddress { get; }

        IAsyncResult BeginReceiveRequest(AsyncCallback callback, object state);
        IAsyncResult BeginReceiveRequest(TimeSpan timeout, AsyncCallback callback, object state);
        IAsyncResult BeginTryReceiveRequest(TimeSpan timeout, AsyncCallback callback, object state);
        IAsyncResult BeginWaitForRequest(TimeSpan timeout, AsyncCallback callback, object state);
        RequestContext EndReceiveRequest(IAsyncResult result);
        bool EndTryReceiveRequest(IAsyncResult result, out RequestContext context);
        bool EndWaitForRequest(IAsyncResult result);
        RequestContext ReceiveRequest();
        RequestContext ReceiveRequest(TimeSpan timeout);
        bool TryReceiveRequest(TimeSpan timeout, out RequestContext context);
        bool WaitForRequest(TimeSpan timeout);
    }

IReplyChannel里没有直接返回一个Message实例的成员。相反,IReplyChannel接口支持通过RequestContext类型访问接收到的Message实例。


RequestContext类型包装了请求消息,而且提供了发送应答消息给发送者的方法。在RequestContext中,可以通过RequestMessage属性查看请求信息。RequestContext的Reply方法提供了发送应答消息的途径。

    public abstract class RequestContext : IDisposable
    {
        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        protected RequestContext();

        public abstract Message RequestMessage { get; }

        public abstract void Abort();
        public abstract IAsyncResult BeginReply(Message message, AsyncCallback callback, object state);
        public abstract IAsyncResult BeginReply(Message message, TimeSpan timeout, AsyncCallback callback, object state);
        public abstract void Close();
        public abstract void Close(TimeSpan timeout);
        protected virtual void Dispose(bool disposing);
        public abstract void EndReply(IAsyncResult result);
        public abstract void Reply(Message message);
        public abstract void Reply(Message message, TimeSpan timeout);
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值