Я пытаюсь одним методом вернуть результат метода POST HttpWebRequest через Reactive интерфейс IObservable. Мне удалось сделать это для метода GET, используя код ниже:
var request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(url);
request.Method = method;
request.Accept = GetHttpType();
request.CookieContainer = new CookieContainer();
return Observable.FromAsyncPattern(request.BeginGetResponse, ar => ProcessResponse(method, ar, request))()
.Select(r => r);
Но я не уверен, как связать воедино асинхронный наблюдатель записи в поток запроса с чтением потока ответа, необходимого для операции HTTP POST. Как соединить следующие переменные obs1
& obs2
, чтобы я мог вернуть obs2?
var request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(url);
var type = GetHttpType();
request.Method = method;
request.Accept = type;
request.ContentType = type;
request.CookieContainer = new CookieContainer();
var data = Serialize(requestResource);
var obs1 = Observable.FromAsyncPattern(request.BeginGetRequestStream, ar1 => ProcessRequest(method, data, ar1, request))
var obs2 = Observable.FromAsyncPattern(request.BeginGetResponse, ar2 => ProcessResponse(method, ar2, request))();
// How do I connect obs1 And obs2 together...
return obs2;
Я бы подумал, что должно работать следующее, но метод 'ProcessResponse' никогда не вызывается, кто-нибудь знает почему?
var obs1 = Observable.FromAsyncPattern(request.BeginGetRequestStream, ar1 => ProcessRequest(method, data, ar1, request))();
var obs2 = Observable.FromAsyncPattern(request.BeginGetResponse, ar2 => ProcessResponse(method, ar2, request));
return obs1.SelectMany(a => obs2(), (a, b) => b);