2016-09-21 7 views
1

私はこの問題を抱えていますが、私はなぜそれが間違っているのでしょうか。私はそれを働かせるために書き直さなければならなかったが、それはすべての間違ったにおいがするが、それは動作する。WebApi - PostAsync

だから、500のからstatusCodeが返されたように、これは、私が最初に試したし、それが動作しないものですが、それは応答を待っていなかったので、これはですが、私はそれがとても

[HttpPost] 
public async Task<JsonResult> Booking(string model) 
{ 
    //do some bits. 
    var a = new JavaScriptSerializer().Serialize(e); 
    var booking = new HttpClient(); 
    HttpContent content = new StringContent(a,Encoding.UTF8); 
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
    HttpResponseMessage response = await booking.PostAsync("https://webapi.domain.com/Booking/Post", content); 
    var aa = response.StatusCode //500 Internal Error 
} 

を待つ必要があります私は

[HttpPost] 
public async Task<JsonResult> Booking(string model) 
{ 
    //do some bits. 
    var a = new JavaScriptSerializer().Serialize(e); 
    var booking = new HttpClient(); 
    HttpContent content = new StringContent(a,Encoding.UTF8); 
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
    HttpResponseMessage response = await booking.PostAsync("https://webapi.domain.com/Booking/Post", content); 
    var t = new Stopwatch(); 

    while (response.StatusCode ==HttpStatusCode.InternalServerError) 
    { 
     t.Start(); 
     var zzzz = response.ReasonPhrase; 
     if (t.ElapsedMilliseconds >10000) 
     { 
      response.StatusCode = HttpStatusCode.RequestTimeout; 
      t.Stop(); 
     } 
    } 
    var aa = response.StatusCode //201 Created 
} 

を書き直しそして、これは醜い、私の201を動作し、私を返しますが、誰も私に言うと、私が間違ってやっている私を見ることができますか?

+2

コードをフォーマットしてください! –

+0

'booking.PostAsync'とは何ですか?なぜあなたはそこに直接行かないのですか? –

+1

最初のコードがなければ2番目のコードが動作することはほとんどありません。本気ですか?応答ステータスコードはしばらくしても変更されません。 HTTPプロトコルには、送信された応答を「更新」する方法がありません。このタイミングのものは何もしません。 – usr

答えて

1

サーバーにタイミングに依存するバグがあります。これは、デバッガを使用してクラッシュを回避するのに十分な時間を与えると消えます。非同期処理がまだ

を保留している間に完了

非同期モジュールまたはハンドラが非同期で何かのように見えます。

クライアントに障害はなく、while (response.StatusCode ==HttpStatusCode.InternalServerError)ループは何も行いません。サーバー上のタイミングを変更することさえありません。あなたのデバッガの使用はおそらくそれを行い、2つの効果はあなたの解釈に混乱しました。

見た目が分かるので、サーバーを修正してください。

+0

こんにちは、私はそれを電子メールの送信に絞り込んでいます、デバッグ時にエラーは発生しません)public bool SendMail(文字列の文字列、文字列の件名、文字列の本文、bool html) {...} –

+0

まあ、厳密に言えば、問題はクライアント側の問題が解決されているので解決されます(存在しません)。最善の方法は、サーバーのクラッシュに関する詳細を質問することです。しかし、いくつかの非同期アクションを開始し、完了を待っていないようです。それがメッセージのことです。そのようなことのためにコードを監査してください。その名前に "async"が付いているものは面白いです。 – usr

関連する問題