WCF AsyncPattern和masstransit请求/响应

时间:2013-07-28 13:59:41

标签: wcf masstransit

我尝试使用masstransit请求/响应来实现异步服务操作(http://msdn.microsoft.com/en-us/library/ms731177.aspx)。

[ServiceContract]
public interface IService1
{
    [OperationContractAttribute(AsyncPattern = true)]
    IAsyncResult BeginMyOperation(string data, AsyncCallback callback, object asyncState);

    string EndMyOperation(IAsyncResult result);
}

public class Service1 : IService1
{
    private string _answer;

    public IAsyncResult BeginMyOperation(string data, AsyncCallback callback, object asyncState)
    {
        return Bus.Instance.BeginPublishRequest(
            new MyRequestMessage { Data = data }, callback, asyncState, cfg =>
                {
                    cfg.Handle<MyResponseMessage>(c => _answer = c.Answer);
                    cfg.SetTimeout(5.Seconds());
                });
    }

    public string EndMyOperation(IAsyncResult result)
    {
        Bus.Instance.EndPublishRequest<MyResponseMessage>(result);
        return _answer;
    }
}

但EndPublishRequest抛出异常“该参数不是IRequest”。我做错了吗?

1 个答案:

答案 0 :(得分:0)

是的,如果您查看签名,则异常消息需要更好一点:

public static bool EndPublishRequest<TRequest>(this IServiceBus bus, IAsyncResult asyncResult)

很明显请求消息类型是此处所需的类型arg。