ファイルが1.5GBを超えると、QuotaExceededException
を投げているWCFファイル転送サービスがあります。私は同様の記事を見直しましたが、私はなぜ例外を取得しているのか、それを解決する方法を理解していません。QuotaExceededExceptionをスローしているWCFファイル転送サービス
System.ServiceModel.QuotaExceededException:受信メッセージ(2147483647)の最大メッセージサイズクォータを超えました。クォータを増やすには、適切なバインディング要素でMaxReceivedMessageSizeプロパティを使用します。ここで
は私のクライアントapp.config
のスニップです:
<basicHttpBinding>
<binding name="BasicHttpBinding_IFileTransfer"
maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"
transferMode="Streamed"
receiveTimeout="00:30:00" sendTimeout="01:30:00"
openTimeout="00:30:00" closeTimeout="00:30:00">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="16384"/>
</binding>
</basicHttpBinding>
は、ここに私のweb.config
のスニップです:
<basicHttpBinding>
<binding name="FileTransfer" maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" transferMode="Streamed"
receiveTimeout="00:30:00" sendTimeout="01:30:00"
openTimeout="00:30:00" closeTimeout="00:30:00">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="16384"/>
</binding>
</basicHttpBinding>
はここで例外を投げるのサービスコードのスニップです:
var sum = 0;
try
{
FileStream targetStream;
var sourceStream = request.FileByteStream;
using (targetStream = new FileStream(tfile, FileMode.Create, FileAccess.Write, FileShare.None))
{
const int bufferLen = 1024 * 64;
var buffer = new byte[bufferLen];
int count;
while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
{
targetStream.Write(buffer, 0, count);
sum += count;
}
targetStream.Close();
sourceStream.Close();
}
}
catch (Exception ex)
{
Logger.Debug("sum = " + sum); // sum = 1610609664 bytes (this is 1.499997 GB)
Logger.LogException(ex);
}
私はそれ以上のものを得ることができません1.5GB
「maxReceivedMessageSize」は、実際に転送されたすべてのヘッダーとデータのサイズを含め、転送された合計データです。たとえばSOAPメッセージとして転送し、データがBase64でエンコードされている場合、転送される実際のデータにはオーバーヘッドが多くなるため、おそらく1.5GBファイルで2GBの制限に達するでしょう。制限を増やす必要があります(Int64.MaxValueが必要ですが、バインディングのコードでのみ可能です。http://stackoverflow.com/questions/1004717/what-is-the-maximum-size-that-maxreceivedmessagesize-ネットネームのために設定可能) – steve16351