Silverlight HttpWebRequest.Create挂起在异步块中

@H_403_6@ 我试图将一个Rpc调用原型从一个JBoss Web服务器从Silverlight(4).我已经编写了代码,它在控制台应用程序中工作 – 所以我知道Jboss正在响应Web请求.移植到silverlight 4,正在引发问题:

let uri =  new Uri(queryUrl)
// this is the line that hangs
let request : HttpWebRequest = downcast WebRequest.Create(uri)
request.Method <- httpMethod;
request.ContentType <- contentType

这可能是一个沙箱问题,因为我的silverlight是从我的文件系统中提供的,Uri是对本地主机的引用 – 尽管我甚至没有得到例外.思考?

谢谢

更新1

我创建了一个新项目并移植了我的代码,现在它正在运行;某些东西必须是不稳定的,但是关于F#Silverlight集成仍然存在.仍然会欣赏在旧模型中调试“挂”网络创建的想法…

更新2

let uri = Uri("http://localhost./portal/main?isSecure=IbongAdarnaNiFranciscoBalagtas")
// this WebRequest.Create works fine
let req : HttpWebRequest = downcast WebRequest.Create(uri)

let Login = async {
    let uri =  new Uri("http://localhost/portal/main?isSecure=IbongAdarnaNiFranciscoBalagtas")
     // code hangs on this WebRequest.Create
     let request : HttpWebRequest = downcast WebRequest.Create(uri)
     return request
}
Login |> Async.RunSynchronously

我一定是缺少一些东西异步块在控制台应用程序中工作正常 – 在Silverlight应用程序中是不允许的?

解决方法

(感谢您发送给fsbugs,强制我们去看看.)

问题是Async.RunSynchronously.当在UI线程上调用时,这将阻止UI线程.事实证明,Silverlight上的WebRequest.Create()会调度到UI线程.所以这是一个僵局.

一般来说,尽量避免在Silverlight(或任何UI线程)上Async.RunSynchronously.在这个例子中可以使用Async.StartImmediate.或者,我认为您可以从任何后台线程调用RunSynchronously没有问题. (我还没有尝试过足够的端到端Silverlight场景来提供更多的建议,您可以退房

Game programming in F# (with Silverlight and WPF)

F# and Silverlight

F# async on the client side

几个简短的例子.)

(回想起来,F#设计团队认为,我们可能不应该将Async.RunSynchronly并入Silverlight的FSharp.Core中;该方法可能会违反平台的精神(无阻塞调用),可能我们将弃用该方法未来的Silverlight版本;另一方面,它仍然在Silverlight上具有cpu密集并行性的有效用途,例如在后台线程上并行运行一堆(非IO)代码).

相关文章

  WPF/E初步印象 修订记录: 2007-01-18      创建 2007-1-25      增加对几何体类的描述,修...
[最后更新:2009.09.14] 稳扎稳打 Silverlight 系列文章 Silverlight 1.0 稳扎稳打Silverlight(1) - 1....
WPF/E的正式版本Silverlight已经公布了,下表列出正式版所有的特性与.NET 3.0中WPF以及Flash/Flex的特性...
由于名称的关系, WPF与WPF/E一直被认为是类似的东西.其实两者除了呈现UI的部分使用的是共同语言XAML之外...
    由于名称的关系, WPF与WPF/E一直被认为是类似的东西.其实两者除了呈现UI的部分使用的是共同语言...
        Visual Studio "Orcas"有了好多新东西哦,太好了,今天看了一下,实在太屌了,从Sc...