Silverlight HttpWebRequest.Create 挂在异步块内

2024-02-20

我正在尝试构建从 Silverlight (4) 到 JBOSS Web 服务器的 Rpc 调用原型。我已经编写了代码,并且它正在控制台应用程序中运行 - 所以我知道 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 是对本地主机的引用 - 尽管我什至没有得到异常。想法?

Thx


UPDATE 1

我创建了一个新项目并移植了我的代码,现在它可以工作了;就 F# Silverlight 集成而言,某些东西肯定仍然不稳定。仍然很感激在旧模型中调试“悬挂”网络创建的想法......


UPDATE 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 线程。事实证明WebRequest.Create()Silverlight 上分派到 UI 线程。所以这是一个僵局。

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

F# 游戏编程(使用 Silverlight 和 WPF) http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!1910.entry

F# 和 Silverlight http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!1854.entry

客户端的 F# 异步 http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!1842.entry

一些简短的例子。)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Silverlight HttpWebRequest.Create 挂在异步块内 的相关文章

  • DefaultHttpClient GET 和 POST 命令 Java Android

    好的 这是我的应用程序 一个 Android 应用程序 允许我从移动应用程序 而不是从网站 将 CokeZone 代码提交到 CokeZone co uk 所以我编写了这部分代码来执行登录后命令 然后检查我是否登录后 问题是 发送 post
  • LoaderManager 不接受“这个”

    好吧 我投降 我想不明白 我正在学习 Udacity 的 Android 基础知识课程 需要了解如何使用加载器加载数据 但是 当我使用以下行时 this 以红色突出显示并显示以下错误 Wrong 3rd argument type Foun
  • 在没有 TransactionScopeAsyncFlowOption.Enabled 的情况下启用异步 TransactionScope

    以下是使用事务范围的异步缓存和数据库更新 我无法使用TransactionScopeAsyncFlowOption Enabled在 v 4 5 1 中引入 因为我使用的 Apache Ignite Net 缓存不支持它 我尝试通过捕获当前
  • 如何在silverlight中将子元素的宽度绑定到父元素的宽度

    我有一个宽度为 1 的网格 所以我认为实际宽度是在运行时决定的 在该网格中 我有另一个网格 我想将其宽度设置为父网格的运行时宽度 我如何通过绑定在 xaml 中做到这一点 我想这实际上会对你有帮助 Width Binding ActualW
  • 在构建服务器上安装 F# 4.1 SDK

    我已在 PC 上安装了支持 F 的 Visual Studio 2017 并且 MSBuild 目标位于C Program Files x86 Microsoft Visual Studio 2017 Enterprise MSBuild
  • 所有 C++ 编译器都支持 async/await 关键字吗?

    我想用async awaitC UE4 框架 中的语法 但由于跨平台代码 我不确定这是否可能 或者可能 如果是 我该如何使用它 而且还有await and await resumable yield and yield value另外 在
  • 等待多个异步调用完成后再继续

    因此 我有一个加载页面 并通过 jquery get 发出多个请求以使用其值填充下拉列表 function LoadCategories Category LoadPositions Position LoadDepartments Dep
  • Silverlight本地存储

    您可能知道 Silverlight 支持本地存储 我们正在考虑创建可在离线模式下工作的 Sl 应用程序 该应用程序可能需要在客户端缓存相当多的数据 显而易见的解决方案 由于性能问题 使用具有某种基于 XMl 结构的本地存储将无法像我们的 P
  • 滚动 X 轴绘图区域 - Silverlight 柱系列

    我有一个工作正常的柱形系列图表 我有一个需要添加的功能 我希望水平滚动能够启用到 x 轴的绘图区域 这是屏幕截图 如果您看到屏幕截图 我有 6 个项目 并且由于项目数量较多 条形图非常细 所以假设如果我有 20 个项目 那么条形图将根本不可
  • 使用异步工作流程并行化的最佳实践

    假设我想抓取一个网页并提取一些数据 我很可能会写这样的东西 let getAllHyperlinks url string async let req WebRequest Create url let rsp req GetRespons
  • python 中的异步编程

    python 中有异步编程的通用概念吗 我可以为一个函数分配一个回调 执行它并立即返回主程序流 无论该函数的执行需要多长时间吗 您所描述的 主程序流程在另一个函数执行时立即恢复 不是通常所说的 异步 又名 事件驱动 编程 而是 多任务 又名
  • wp7 芒果中的 DataTemplateSelector

    我的应用程序中需要一个数据模板选择器 我发现这个博客 http www windowsphonegeek com articles Implementing Windows Phone 7 DataTemplateSelector and
  • 如何在 F# 中执行 Seq.takeWhile + 一项

    我想编写一个使用谓词过滤序列的函数 但结果还应该包括谓词返回 false 的第一个项目 如果 F 中有一个break关键字 逻辑将是这样的 let myFilter predicate s seq for item in s do yiel
  • 如何在 F# 中实现返回 void 的接口成员

    想象一下 C 中的以下接口 interface IFoo void Bar 我如何在 F 中实现这一点 我在 30 分钟的在线搜索中找到的所有示例都仅显示具有返回类型的示例 我认为这在函数式风格中更常见 但在这种情况下我无法避免 这是我到目
  • F# - 构造嵌套类型

    我想这是非常基本的 F 问题 类型有 type Id1 Id1 of int type Id2 Id2 of string type Id Id1 Id2 type Child Id Id Smth string list type Nod
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 使用 VB/ASP classic 可以向 API 发出 HTTP 请求吗?

    是否可以使用 ASP classic 向 Web API 发出请求 例如 像 Flickr API 这样简单的东西 或者这种东西很久以前就不支持了 这是很有可能的 Dim req Set req Server CreateObject MS
  • c# WebClient DownloadProgresschanged TotalBytesToReceive = -1

    我浏览了一下网络 没有看到其他人遇到这个问题 我正在使用使用 DownloadFileAsync 的 Web 客户端 当事件处理程序 DownloadProgressChanged 被调用时 TotalBytesToReceive 来自 D
  • 非泛型类型 Type 不需要类型参数

    我正在创建一个简单的测试类型提供程序 我想提供一个字符串 并返回一个类型名称等于所提供的字符串的类型 但结果不行 说BasicProvider是非泛型类型 Error 非泛型类型 SimpleStringProvider BasicProv
  • 我应该在 Promise.all 中使用 wait 吗?

    我正在构建快速中间件 以对数据库进行两次异步调用 以检查用户名或电子邮件是否已在使用中 这些函数返回的承诺没有捕获 因为我想将数据库逻辑与 req res next 逻辑分开 并且我有集中的错误处理 需要next作为一个论点 在我对本地环境

随机推荐