1

この質問はすでに何千回も聞かれているようですが、構成の問題は人によって異なります。画像を提供し、画像のアップロード要求も受け取る WCF サーバーがあります。画像をアップロードするときに、サイズが 65k を超えるとエラー 400 が発生します。

WCF でトレースをオンにすると、正確なエラーが発生します

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

このパラメーターを増やす必要があることはわかっていますが、web.config ファイルのどこにあるはずなのかを見つけることができます。これが私がweb.configに持っているものです:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ITransferService" closeTimeout="04:01:00"
          openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00"
          maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
          maxReceivedMessageSize="2147483647"
          textEncoding="utf-8"
          transferMode="Streamed">
          <readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="returnFaults">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="ESLMobileIhaServiceClient.ServiceMobileIha" behaviorConfiguration="returnFaults">
        <endpoint contract="ESLMobileIhaServiceClient.ServiceMobileIha" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITransferService"/>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex">
        </endpoint>
      </service>
    </services>
    </system.serviceModel>
  <system.webServer>

これで私を助けてくれる人はいますか?;) stackoverflow で見つかったさまざまなアプローチで 4 時間試行しましたが、何も役に立ちません - 残念ながら。

アップデート:

リクエストは、クライアントからサーバーへのファイルのアップロードです。診断を有効にすると、サーバーのログファイルにエラーが表示されます。

サーバー Web.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ITransferService" closeTimeout="04:01:00"
          openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00"
          maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
          maxReceivedMessageSize="2147483647"
          textEncoding="utf-8"
          transferMode="Streamed">
          <readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="returnFaults">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="ESLMobileIhaServiceClient.ServiceMobileIha" behaviorConfiguration="returnFaults">
        <endpoint contract="ESLMobileIhaServiceClient.ServiceMobileIha" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITransferService"/>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex">
        </endpoint>
      </service>
    </services>
    </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

クライアント App.config

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="InputFileLocation" value="U:\vorlagen\esl_evu_demo\Mobile Instandhaltung\Testdaten\Stammdaten\"/>
    <add key="OutputFileLocationOpen" value="U:\vorlagen\esl_evu_demo\Mobile Instandhaltung\Testdaten\offen\"/>
    <add key="OutputFileLocationClosed" value="U:\vorlagen\esl_evu_demo\Mobile Instandhaltung\Testdaten\abgeschlossen\"/>
    <add key="ImageObserveLocation" value="U:\vorlagen\esl_evu_demo\Mobile Instandhaltung\Testdaten\kamerabilder\"/>
    <add key="ImageSaveLocation" value="U:\vorlagen\esl_evu_demo\Mobile Instandhaltung\Testdaten\savedimages\"/>
    <add key="DeleteImageAfterCopy" value="true"/>
    <add key="HelpFile_de_DE" value="ESL_EVU_1031_Mobile_Instandhaltung.pdf"/>
    <add key="HelpFile_fr_FR" value=""/>
    <add key="BackupLocation" value="backup\"/>
    <add key="NumOfBackups" value="3"/>
    <add key="Language" value="de_DE"/>
    <add key="FontType" value="Arial"/>
    <add key="TextSize" value="10"/>
    <add key="TitleTextSize" value="12"/>
    <add key="ButtonTextSize" value="12"/>
    <add key="IdentifikationGeraet" value="Kontrolle/Instandhaltung"/>
    <add key="ClientSettingsProvider.ServiceUri" value=""/>
  </appSettings>
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
      </providers>
    </roleManager>
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ServiceMobileIha" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
            maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:51515/ServiceMobileIha.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ServiceMobileIha"
        contract="ServiceReference1.ServiceMobileIha" name="BasicHttpBinding_ServiceMobileIha" />
    </client>
  </system.serviceModel>

<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
4

3 に答える 3

1

交換:

  <system.web>
    <httpRuntime maxRequestLength="2147483647" />
  </system.web>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime maxRequestLength="2147483647" />
  </system.web>

全体的な httpRuntime -> maxRequestLenght の増加を許可する;)

皆さん、良い週末をお過ごしください

于 2012-06-22T15:14:46.423 に答える
0

クライアント側の問題である可能性があります。あなたは変更しましたかmaxReceivedMessageSizemaxBufferPoolSizeそしてmaxBufferSizeあなたのクライアント側で?

于 2012-06-21T20:09:21.177 に答える
0

これは特に maxReceivedMessageSize 構成に影響しますが、クライアントまたはサーバーである可能性があります。クライアントは応答を受信して​​いますが、サーバーは要求を受信して​​いるためです。したがって、どちらが大きすぎるかによって異なります。たとえば、クライアントが大きなペイロードを送信しているのに、サーバーが void または bool または何か小さいものを送り返している場合、変更する必要があるのはサーバーの構成であり、その逆も同様です。

于 2012-06-21T20:13:23.553 に答える