我想在我的SL应用程序中使用Rx。我想在我的Web服务器的REST请求上设置一个observable。我没有看到如何连接Observable.FromEvent或Observable.FromAsync。我最好的猜测是使Webclient完成触发事件,然后执行Observable.FromEvent。有没有更好的办法?如何在Silverlight Webclient上使用Rx Observable
3
A
回答
3
在这里,你可以这样做,在Rx中发出Web请求的最佳方式。
public IObservable<WebResponse> MakeWebRequest(
Uri uri,
Dictionary<string, string> headers = null,
string content = null,
int retries = 3,
TimeSpan? timeout = null)
{
var request = Observable.Defer(() =>
{
var hwr = WebRequest.Create(uri);
if (headers != null)
{
headers.ForEach(x => hwr.Headers[x.Key] = x.Value);
}
if (content == null)
{
return Observable.FromAsyncPattern<WebResponse>(hwr.BeginGetResponse, hwr.EndGetResponse)();
}
var buf = Encoding.UTF8.GetBytes(content);
return Observable.FromAsyncPattern<Stream>(hwr.BeginGetRequestStream, hwr.EndGetRequestStream)()
.SelectMany(x => Observable.FromAsyncPattern<byte[], int, int>(x.BeginWrite, x.EndWrite)(buf, 0, buf.Length))
.SelectMany(_ => Observable.FromAsyncPattern<WebResponse>(hwr.BeginGetResponse, hwr.EndGetResponse)());
});
return request.Timeout(timeout ?? TimeSpan.FromSeconds(15)).Retry(retries);
}
下面是如何使用它:
MakeWebRequest(new Uri("http://www.google.com"))
.Subscribe(
x => Console.WriteLine("Response is {0}", x),
ex => Console.WriteLine("Someone Set Us Up The Bomb: {0}", ex.Message));
+0
这就是要花费一些时间来吸收! – pm100
+0
不要担心实现,只要知道您传递的信息发出Web请求,并且您将获得一个IObservable
+0
您是否还可以包含示例使用代码,包括错误处理? – AnthonyWJones
相关问题
- 1. 上使用Silverlight 2的WebClient
- 2. Rx Observable - 链接
- 3. 如何在Rx中包装SKPaymentQueue Observable
- 4. 与webclient的Rx argumentException
- 5. 我应该同时使用'import'rxjs/Rx'`和`import {Observable} from'@ rxjs/Observable'`
- 6. 如何使用Rx和F将WPF Button.Click事件转换为Observable#
- 7. 在Silverlight 4中使用TPL和Rx
- 8. 如何在Silverlight中使用Reactive Extensions(Rx)组织这些调用?
- 9. Observable和Webclient获取CSV csv
- 10. 在Rx Observable事务中使用Realm调用时,如何防止Realm Threading问题?
- 11. 如何在Silverlight WebClient中设置超时?
- 12. Rx在Observable创建之前订阅
- 13. 使用的Rx
- 14. 如何使用WebClient进行POST并在Silverlight中获得响应
- 15. Silverlight WebClient Progressive Download
- 16. 在Windows Ce上使用Webclient;
- 17. 如何使用RX应用宽限期?
- 18. RxPy - 将Live Twitter流转为Rx Observable?
- 19. 如果WebClient的情况下,在Silverlight
- 20. 使用RX框架来实现Observable模式
- 21. 如何从`Rx`(不是角度)导入`Observable`
- 22. 如何根据事件中的条件完成Rx Observable
- 23. 如何让WebClient使用Cookie?
- 24. 在Silverlight中使用的Rx为WCF调用不TakeUntil
- 25. 如何调用取决于rx网络调用的非rx网络调用
- 26. 如何使用angular2 Observable
- 27. 使用WebClient取消上传?
- 28. 如何在Rx链中包含条件?
- 29. silverlight,在WCF调用上使用Observable,投射IEvent <T>其中T:AsyncCompletedEventArgs
- 30. 超时如何在Hystrix中使用Observable?
+1我想看到一些一个展示看起来像什么;) – AnthonyWJones