Azure Appサービスに配備されたAspNetCoreにWebApiがあります。 WebApiは、オブジェクトの配列をポストするためにのみ使用できます。オブジェクトには多くのプロパティ(100+)と3つのオブジェクト配列が含まれています。 (それは建物を表す)。オブジェクト配列には、それぞれ300個以上のオブジェクトを含めることができます。大きなリクエストでAzure接続設定のWeb APIが失敗する
ビジュアルスタジオ2017(15.4.1)でデバッグしているとき、apiは正常に動作し、すべての要求を受け入れます。 Azureにデプロイされると、ほとんどの要求を受け入れます。しかし、いくつかは空白に消えます。それによって私は何の応答も全くないことを意味する。間違った要求には、配列の1つに多くのオブジェクトがあります。オブジェクトの量を特定の数に減らすことによって、要求が受け入れられます。つまり、ビジュアルスタジオではすべてのリクエストが受け入れられています。データ送信は確実です。
私はテストコントローラを作成しましたが、同じインターフェイスを使用しましたが、論理はなく、応答 "succes"のみでした!このインタフェースでは、要求も失敗します(同じ動作)。 Newtonsoft(10.0.3)は両方のコントローラでデシリアライズに使用されます。
これらの要求とのこの動作の違いを引き起こす原因は何ですか?
コントローラのコード:
public class TestController : Controller
{
[HttpPost]
[RequireHttps]
public IActionResult Post([FromBody] Buildings Buildings)
{
enumActionResult status = enumActionResult.success;
try
{
if (Buildings == null)
throw new Exception("No valid buildings posted!");
if (Buildings.items == null)
throw new Exception("No valid building items posted!");
if (Buildings.items.Count == 0)
throw new Exception("Zero building items posted!");
return Json(new response() { status = status.ToString(), Buildings = list
}
catch (Exception ex)
{
return Json(new ErrorResponseFormat() { message = ex.Message, status = enumActionResult.error, data = new ErrorResponse(ex) });
}
}
}
アップデート(2017年12月19日): という問題が依然としてあるが、SSLに絞り込まれます。私は失敗したURLにhttpsで要求を行う、と私はそれがsuccesfullのあるHTTPのURLでまったく同じ要求を発射した場合
public class EchoController : Controller
{
[HttpPost]
public IActionResult Post()
{
return new FileStreamResult(Request.Body, Request.ContentType);
}
}
:私は要求を返す新しいコントローラを作成しました。これは、デバッガから取得したのと同じ動作です。これは、httpのみを使用するためです。したがって、デバッガと紺碧のクラウド環境との違いの代わりに、httpとhttpsの問題があるように見えます。 (ブルース・チェンにより示唆されるように)私は設定で実装ところで
:
<system.webServer>
<security>
<requestFiltering>
<!-- Measured in Bytes -->
<requestLimits maxAllowedContentLength="4000000000" maxQueryString="100000000"/>
<!-- 1 GB, Byte in size, up to 2GB-->
</requestFiltering>
<access sslFlags="Ssl, SslRequireCert"/>
</security>
</system.webServer>
および.NET 4.6.2にアップグレード。この時点ではまだ解決策はありませんが、問題は絞り込まれているようです。
更新(20-12-2017): 私は、次の面白いことを見つけました:私はそれが失われた(https)をAPIに「大」要求を送信します。しかし、小さなリクエストが先行すると、両方のリクエストが受け入れられます。だから、大規模な要求を伴う接続設定が失敗するようです。
webapiはカスタムドメインhttpsとIPホワイトリストを使用しています。クライアントは、クライアント証明書で認証する必要があります。完全なWebapiの設定(はい、前のrequestLimitsエントリを削除しました):
configuration>
<connectionStrings>
...
</connectionStrings>
<system.webServer>
<security>
<access sslFlags="Ssl, SslRequireCert"/>
</security>
</system.webServer>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
クライアントは証明書を使用して郵便番号です。何かご意見は?
私たちは、いくつかのコード、ログ、または何かを見たりする必要があります。ちょうど推測するつもりです... – Milney
ここで誰も何らかのコードを投稿する必要がある精神病者はいません。 POSTリクエストを使用していると確信しています。GETではなく、切り捨てられている可能性があります。あなたはnewsoftが非直列化に使用されていることを意味しますか?カスタムモデルバインダーを持っていますか?JSON –
をコードで更新して送信していますか?カスタムモデルバインダーは使用されていません – Martijn