Azure で実行される ASP.NET 4.0 Web サイトにファイル アップロードを実装しました。WCF サービスへの AJAX 呼び出しはローカルでは正常に機能しますが、Azure に展開すると、次の例外で失敗します。
System.Web.HttpException Request.BufferlessInputStream は、Request の内容が既に読み込まれているため使用できません。
次の行で:
HttpContext.Current.Request.GetBufferlessInputStream().Read(COMPLETEBufferedFileContent, 0, fileContentLength);
私の WebService-Method は次のように宣言されています。
public Stream UploadProfileImage()
そして、サービスの構成の一部は次のようになります。
<bindings>
<customBinding>
<binding name="NiPDefaultCustomBinding"
openTimeout="00:01:00"
closeTimeout="00:01:00"
sendTimeout="00:01:00"
receiveTimeout="00:01:00" >
<sslStreamSecurity/>
<webMessageEncoding webContentTypeMapperType="XXXMapperForStreamInParamAndJSON, AssemblyX">
<readerQuotas maxArrayLength="16384"
maxBytesPerRead="4096"
maxDepth="32"
maxNameTableCharCount="16384"
maxStringContentLength="8192" />
</webMessageEncoding>
<httpsTransport maxBufferPoolSize="524288"
maxBufferSize="65536"
maxReceivedMessageSize="6291456"
transferMode="Streamed"
manualAddressing="true">
</httpsTransport>
</binding>
</customBinding>
私の XXXMapperForStreamInParamAndJSON は GetMessageFormatForContentType() をオーバーライドし、このシナリオでは WebContentFormat.Raw を返します。
ストリーミングを使用していることは知っていますが、ストリーミングには意味のない完全なコンテンツをバッファリングしていますが、この場合は問題になりません。この方法で画像をアップロードし、サムネイルを作成する必要があるためです。とにかくバッファ/メモリで完全なビットマップが必要です。
.Form、.Files、.InputStream、または Request-Object に関連するその他のオブジェクトにはアクセスしないため、Azure で呼び出しが失敗する理由がわかりませんが、ローカルでは機能します。すべてが 100% 同じです。
誰か助けてくれませんか?
誰か私にヒントをくれませんか?この問題は非常に難しく、これを修正することが非常に重要です。そうしないと、いつか Azure でオンラインになる機会がなくなるからです。