2013-07-28 2 views
1

Я пытаюсь выполнить операцию асинхронного обслуживания (http://msdn.microsoft.com/en-us/library/ms731177.aspx) с запросом/ответом masstransit.WCF AsyncPattern и запрос/ответ masstransit

[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». Я делаю что-то неправильно?

ответ

0

Да, сообщение об исключении должно быть немного лучше, если вы посмотрите на подпись, хотя:

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

становится очевидным, что запрос тип сообщения требуемого типа Arg здесь.