Не уверенный, если это точно, что Вы имели в виду, но:
$#
= Количество аргументов передало сценарию
удара Иначе, Вы могли бы искать что-то как man wc
Теперь он называется «AsyncGetResponse» (больше не «GetResponseAsync»). «Выполнить» было переименовано в «Запускать синхронно». Так что я не думаю, что вы упускаете здесь что-то существенное, просто измените название в последней версии.
Каковы ваши настройки отладчика в отношении «Tools \ Options \ Debugging \ General \ Enable Just My Code» и «Debug» \ Исключения "(например, установить прерывание, когда генерируется первое исключение CLR или нет)? Мне неясно, касается ли ваш вопрос поведения программы или поведения инструментов VS (похоже на последнее). Это еще больше осложняется тем фактом, что точки останова / отладки в «местах» в F # Beta1 имеют некоторые ошибки, особенно в отношении асинхронных рабочих процессов, это означает, что поведение, которое вы видите в отладчике, может выглядеть немного странно, даже если программа выполняется правильно ...
Используете ли вы VS2008 CTP или VS2010 Beta1?
В любом случае, это исключение из-за ожидается ответ 500, так работает WebRequest. Вот небольшая демонстрационная программа:
open System
open System.ServiceModel
open System.ServiceModel.Web
[<ServiceContract>]
type IMyContract =
[<OperationContract>]
[<WebGet(UriTemplate="/Returns500")>]
abstract Returns500 : unit -> unit
[<OperationContract>]
[<WebGet(UriTemplate="/Returns201")>]
abstract Returns201 : unit -> unit
type MyService() =
interface IMyContract with
member this.Returns500() =
WebOperationContext.Current.OutgoingResponse.StatusCode <-
System.Net.HttpStatusCode.InternalServerError
member this.Returns201() =
WebOperationContext.Current.OutgoingResponse.StatusCode <-
System.Net.HttpStatusCode.Created
let addr = "http://localhost/MyService"
let host = new WebServiceHost(typeof<MyService>, new Uri(addr))
host.AddServiceEndpoint(typeof<IMyContract>, new WebHttpBinding(), "") |> ignore
host.Open()
open System.Net
let url500 = "http://localhost/MyService/Returns500"
let url201 = "http://localhost/MyService/Returns201"
let async_value (url:string) =
async {
let req = WebRequest.Create(url)
let! rsp = req.AsyncGetResponse()
return (rsp :?> HttpWebResponse).StatusCode
}
let status = Async.RunSynchronously(async_value url201)
printfn "%A" status
try
let status = Async.RunSynchronously(async_value url500)
printfn "%A" status
with e ->
printfn "%s" (e.ToString())
Вы можете использовать try ... внутри асинхронного кода для перехвата исключений:
let async_value =
async {
let req = WebRequest.Create("http://unknown")
try
let! resp = req.AsyncGetResponse()
return "success"
with
| :? WebException as e -> return "failure"
}