2013-04-19 3 views
5

Я искал эту проблему, и я нашел похожие проблемы, отправленные другими пользователями, но все, что я пробовал, не работает. Проблема в том, что я использую службу WCF на IIS и клиент, который пытается загрузить сериализованное изображение в строку, размер изображения составляет 9 мб aprox, каждый из которых отлично работает, я могу отправлять данные без проблем, кроме изображения.Ошибка службы WCF 400 плохой запрос

Я включил tracelog и сообщение об ошибке говорит, что MaxReceivedMessageSize превышает

Вот мой конфиг на обслуживание:

<system.diagnostics> 
<sources> 
    <source name="System.ServiceModel" 
     switchValue="Information, ActivityTracing" 
     propagateActivity="true" > 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
    </source> 
    <source name="System.ServiceModel.MessageLogging"> 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
    </source> 
    <source name="myUserTraceSource" 
     switchValue="Information, ActivityTracing, All"> 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
    </source> 
</sources> 
<trace autoflush="true" /> 
<sharedListeners> 
    <add name="xml" 
     type="System.Diagnostics.XmlWriterTraceListener" 
     initializeData="ErrorSvcLog.svclog" /> 
</sharedListeners> 
</system.diagnostics> 

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IServicioSalud" closeTimeout="10:01:00" 
       maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" openTimeout="10:01:00" 
       receiveTimeout="10:10:00" sendTimeout="10:01:00" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"> 
       <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" /> 
      </binding> 
     </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="ServiceBehavior" name="ServicioSalud"> 
     <endpoint address="" binding="basicHttpBinding" contract="IServicioSalud" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="200000" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<diagnostics> 
    <messageLogging 
     logEntireMessage="true" 
     logMalformedMessages="false" 
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false" 
     maxMessagesToLog="3000" 
     maxSizeOfMessageToLog="2000"/> 
</diagnostics> 
</system.serviceModel> 
</configuration> 

И клиент конфигурации

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IServicioSalud" closeTimeout="10:01:00" 
       openTimeout="10:01:00" receiveTimeout="10:10:00" sendTimeout="10: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="4096" maxNameTableCharCount="2147483647" /> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://xxx.xxx.x.xxx:xxxx/wcfservicesalud/Service.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServicioSalud" 
      contract="IServicioSalud" name="BasicHttpBinding_IServicioSalud" /> 
    </client> 
</system.serviceModel> 
+0

Необходимо настроить конечную точку службы на указанную вами конфигурацию привязки (BasicHttpBinding_IServicioSalud) с помощью атрибута 'bindingConfiguration'. – Tim

ответ

4

В файле конфигурации вы не назначили конфигурацию привязки, которую вы создали, поэтому используются значения по умолчанию для BasicHttpBinding. Вы должны явно назначить связывание вы определили (BasicHttpBinding_IServicioSalud) к конечной точке, как это:

<endpoint address="" bindingConfiguration="BasicHttpBinding_IServicioSalud" binding="basicHttpBinding" contract="IServicioSalud" /> 

ли это для вашей конфигурации службы, как служба должна быть установлена, чтобы принимать большие данные.

+0

Спасибо! Я ломал голову, пытаясь решить эту проблему. – MaxJRB

+0

@MaxJRB - Добро пожаловать. Рад, что смог помочь. – Tim

0

Это моя версия. Убедитесь, что у вас есть привязка Конфигурация, указанная в нужной услуге. В моем случае я должен указать имя basicHttpBinding.

<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBinding" maxBufferSize="64000000" maxReceivedMessageSize="64000000" maxBufferPoolSize="64000000"> 
     <readerQuotas maxDepth="64000000" maxStringContentLength="64000000" maxArrayLength="64000000" maxBytesPerRead="64000000" /> 
     <security mode="None"/> 
    </binding> 
    </basicHttpBinding> 
</bindings> 


<services> 
     <service behaviorConfiguration="WS.Service1Behavior" name="WS.EasyStockWS"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" contract="WS.IEasyStockWS"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
</services> 
0

Для меня причиной послужило то, что по моей просьбе я не задал тип контента.

Смежные вопросы