gpt4 book ai didi

Silverlight HttpWebRequest.Create 卡在异步 block 内

转载 作者:行者123 更新时间:2023-12-03 11:16:21 25 4
gpt4 key购买 nike

我正在尝试从 Silverlight (4) 对 JBOSS 网络服务器的 Rpc 调用进行原型(prototype)设计。我已经编写了代码并且它在控制台应用程序中运行 - 所以我知道 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 是对 localhost 的引用——尽管我什至没有遇到异常。想法?

谢谢

更新 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

我肯定错过了什么; Async block 在控制台应用程序中工作正常 - Silverlight 应用程序中不允许吗?

最佳答案

(感谢您将其发送给 fsbugs,以迫使我们仔细查看。)

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

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

Game programming in F# (with Silverlight and WPF)

F# and Silverlight

F# async on the client side

举几个简短的例子。)

(回想起来,F# 设计团队认为我们可能不应该在 Silverlight 的 FSharp.Core 中包含 Async.RunSynchronously;该方法可能违反平台的精神(没有阻塞调用)。我们可能会在 future 的 Silverlight 版本。另一方面,它仍然有效地用于 Silverlight 上的 CPU 密集型并行性,例如在后台线程上并行运行一堆(非 IO)代码。)

关于Silverlight HttpWebRequest.Create 卡在异步 block 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com