Silverlight HttpWebRequest. Создайте подвешивает внутренний асинхронный блок

Я пытаюсь моделировать вызов RPC к веб-серверу JBOSS от Silverlight (4). Я написал код, и он работает в консольном приложении - таким образом, я знаю, что Jboss отвечает на веб-запрос. При портировании его на 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

Я создал новый проект и портировал мой код, и теперь он работает; что-то должно быть нестабильным отношением w/к интеграции Silverlight F# все еще. Все еще ценил бы мысли об отладке "зависающей" сети, создают в старой модели...


ОБНОВЛЕНИЕ 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?

10
задан Brian 24 June 2010 в 20:56
поделиться

3 ответа

Здесь похожая проблема - хотя нет ссылки на silverlight (на самом деле это «класс обслуживания Windows»):

http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom / thread / 10854fc4-2149-41e2-b315-c533586bb65d

2
ответ дан 4 December 2019 в 03:15
поделиться

Я думаю, что вы нажимаете на ограничение максимального количества http-соединений: смотрите Асинхронные вызовы веб-сервера в Silverlight и максимальное количество HTTP-соединений и http://weblogs.asp.net/mschwarz/archive/2008/07/21/internet-explorer-8-and-maximum-concurrent-connections.aspx

-1
ответ дан 4 December 2019 в 03:15
поделиться

(Спасибо, что послали это в fsbugs, чтобы заставить нас внимательно посмотреть.)

Проблема в Async.RunSynchronously. При вызове на потоке UI это блокирует поток UI. И получается, что WebRequest.Create() на Silverlight диспетчеризируется на поток UI. Так что это тупик.

В общем, старайтесь избегать Async.RunSynchronously на Silverlight (или на любом потоке UI). Вы можете использовать Async.StartImmediate в этом примере. В качестве альтернативы, я думаю, вы можете вызвать RunSynchronously из любого фонового потока без проблем. (Я сам не пробовал достаточного количества сквозных сценариев Silverlight, чтобы дать больше советов. Вы можете посмотреть

Программирование игр на F# (с Silverlight и WPF)

F# и Silverlight

F# async на стороне клиента

для нескольких коротких примеров).

(Оглядываясь назад, команда разработчиков F# считает, что нам, возможно, не следовало включать Async.RunSynchronously в FSharp.Core для Silverlight; метод потенциально нарушает дух платформы (никаких блокирующих вызовов). Возможно, в будущих выпусках Silverlight мы откажемся от этого метода. С другой стороны, он все еще может быть использован для интенсивного параллелизма в Silverlight, например, для параллельного выполнения кучи кода (не связанного с IOS) в фоновых потоках.)

.
5
ответ дан 4 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: