2014年8月7日木曜日

WCF:送受信受信可能な最大メッセージ サイズを増やす

.NET:Tips > WCF:送受信受信可能な最大メッセージ サイズを増やす


その1


エラー内容

【クライアント←サーバー】
--------------------
受信メッセージの最大メッセージ サイズ クォータ (65536) を超えました。このクォータを増やすには、適切
なバインド要素の MaxReceivedMessageSize プロパティを使用してください。
--------------------
Server stack trace:
   場所 System.ServiceModel.Channels.HttpInput.ThrowMaxReceivedMessageSizeExceeded()
   場所 System.ServiceModel.Channels.HttpInput.GetMessageBuffer()
   場所 System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)
   場所 System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception& requestException)
   場所 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitF
orReply(TimeSpan timeout)
   場所 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   場所 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeo
ut)
   場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperat
ionRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperat
ionRuntime operation, Object[] ins, Object[] outs)
   場所 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall
, ProxyOperationRuntime operation)
   場所 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
【クライアント→サーバー】
--------------------
リモート サーバーから予期しない応答が返されました: (400) Bad Request。
--------------------
Server stack trace:
   場所 System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebReques
t request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException)
   場所 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitFo
rReply(TimeSpan timeout)
   場所 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   場所 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeou
t)
   場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperati
onRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperati
onRuntime operation, Object[] ins, Object[] outs)
   場所 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall
, ProxyOperationRuntime operation)
   場所 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

対処法

【App.config[クライアント←サーバー]】
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="LargeMessageBinding"
                 maxReceivedMessageSize="1073741824"
                 maxBufferSize="1073741824"
                 maxBufferPoolSize="1073741824">
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint name="HogeService"
          address="http://xxxxx/HogeService.svc"
          binding="basicHttpBinding"
          contract="Hoge.HogeService"
          bindingConfiguration="LargeMessageBinding"
      />
    </client>
  </system.serviceModel>
</configuration>
【Web.config[クライアント→サーバー]】
<configuration>
  <configSections>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="LargeMessageBinding"
                 maxReceivedMessageSize="1073741824"
                 maxBufferSize="1073741824"
                 maxBufferPoolSize="1073741824">
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Behavior1" name="Hoge.HogeService">
        <endpoint address="" binding="basicHttpBinding" contract="Hoge.HogeService" bindingConfigur
ation="LargeMessageBinding">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

参考ページ


その2


エラー内容

【クライアント→サーバー】
--------------------
http://127.0.0.1:3293/SampleSite/HogeService.svc に対する HTTP 応答の受信中にエラーが発生しました。
この原因としては、サービス エンドポイント バインドが HTTP プロトコルを使用していないことが考えられ
ます。また別の原因として、HTTP 要求コンテキストがサーバーによって中止された可能性もあります (サーバ
ーがシャットダウンした場合など)。詳細についてはサーバー ログを参照してください。
--------------------
Server stack trace:
   場所 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebExcepti
on webException, HttpWebRequest request, HttpAbortReason abortReason)
   場所 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitF
orReply(TimeSpan timeout)
   場所 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   場所 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeo
ut)
   場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperat
ionRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   場所 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperat
ionRuntime operation, Object[] ins, Object[] outs)
   場所 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCal
l, ProxyOperationRuntime operation)
   場所 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

対処法

【Web.config】
<configuration>
  <config>
    <system.web>
      <!-- 通信容量150MB、実行時タイムアウト30分 -->
      <httpRuntime maxRequestLength="153600" executionTimeout="1800" />
    </system.web>

    <!-- IIS7で必要な設定 -->
    <system.webServer>
      <security>
        <requestFiltering>
          <!-- 通信容量1G -->
          <requestLimits maxAllowedContentLength="1073741824"/>
        </requestFiltering>
      </security>
    </system.webServer>
  </config>
</configuration>

0 件のコメント:

コメントを投稿