2015-06-17 2 views
1

Передаю некоторые значения моей службе WCF из приложения .net в строчном формате. В этой структуре будет формат пропущенных строк,Удаленный сервер возвратил неожиданный ответ: (413) Request Entity Too Large.?

ItemName~ItemDescription~ItemPrice|ItemName~ItemDescription~ItemPrice|... 

Каждая позиция будет разделена символом '|' персонаж. Я принимал около 1000 предметов. Он работал так, как ожидалось, но когда я пришел к 1500 предметам, эта ошибка возникает.

The remote server returned an unexpected response: (413) Request Entity Too Large.

Пожалуйста, помогите мне устранить эту ошибку.

Это метод в обслуживании

private void InsertGpLineItems(string lineItems) 
{ 
    //Here I will process the insertion of line items to the GP system. 
} 

Это web.config в моей службы WCF.

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="connectionString" value="data source=localhost; initial catalog=TWO; integrated security=SSPI"/> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <pages validateRequest="false" /> 
    <httpRuntime requestValidationMode="2.0" /> 
    </system.web> 
    <system.diagnostics>  
    <sources> 
     <source name="System.ServiceModel.MessageLogging" 
       switchValue="Information, ActivityTracing, Error"> 
     <listeners> 
      <add name="messages" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="messages.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" 
         logMalformedMessages="true" 
         logMessagesAtServiceLevel="true" 
         logMessagesAtTransportLevel="true" 
         maxMessagesToLog="3000" 
         maxSizeOfMessageToLog="2000"/> 
    </diagnostics> 
    <services> 
     <service name="Service1.IService1"> 
     <endpoint address="" binding="basicHttpBinding" 
        contract="Service1.IService1"> 
     </endpoint> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:50935/Service1.svc"/> 
      </baseAddresses> 
     </host> 
     <!--<endpoint address="http://localhost:50935/Service1.svc" binding="basicHttpBinding"></endpoint>--> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="SampleBinding" 
       messageEncoding="Text" 
       closeTimeout="00:02:00" 
       openTimeout="00:02:00" 
       receiveTimeout="00:20:00" 
       sendTimeout="00:02:00" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="2147483647" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       textEncoding="utf-8" 
       transferMode="Buffered" 
       useDefaultWebProxy="true">   
      <readerQuotas maxDepth="2000000" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" 
         proxyCredentialType="None" 
         realm=""> 
      </transport> 
      </security> 
     </binding>   
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="behaviorGPLineItemsService"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

ответ

3

Попробуйте это,

<bindings> 
    <basicHttpBinding> 
    <binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text"> 
     <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

Вместо этих строк в коде,

<bindings> 
    <basicHttpBinding> 
    <binding name="SampleBinding" 
      messageEncoding="Text" 
      closeTimeout="00:02:00" 
      openTimeout="00:02:00" 
      receiveTimeout="00:20:00" 
      sendTimeout="00:02:00" 
      allowCookies="false" 
      bypassProxyOnLocal="false" 
      hostNameComparisonMode="StrongWildcard" 
      maxBufferPoolSize="2147483647" 
      maxBufferSize="2147483647" 
      maxReceivedMessageSize="2147483647" 
      textEncoding="utf-8" 
      transferMode="Buffered" 
      useDefaultWebProxy="true">   
     <readerQuotas maxDepth="2000000" 
        maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" 
        maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" /> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" 
        proxyCredentialType="None" 
        realm=""> 
     </transport> 
     </security> 
    </binding>   
    </basicHttpBinding> 
</bindings> 

Я надеюсь, что это поможет вам. :)

+0

Я попробую это. Спасибо. –

+0

Спасибо, это работает как шарм. –

+1

Рад помочь вам :) –

0

Это потому, что услуга типа HTTP GET которая ограничена длиной.

Если ваши данные действительно большие, то вместо этого вы должны использовать HTTP POST.

[WebInvoke(Method = "POST")] 
private void InsertGpLineItems(string lineItems) 

Кроме того, вам нужно отредактировать файл web.config вам, как вы можете find here.

+0

Даже после того, как я положил это на свой метод веб-службы, я получаю ту же ошибку. –

+0

проверьте этот http://stackoverflow.com/questions/20575946/the-remote-server-returned-an-unexpected-response-413-request-entity-too-larg и этот http://stackoverflow.com/questions/ 16120758/remote-server-returns-an-surprise-response-413-request-entity-too-large –

+0

Не работает: (... –

0

Одной из причин он не может работать в том, что вы определили связывание не используются конечной точкой, потому что вы не указывать его через атрибут bindingConfiguration в элементе endpoint. В результате WCF использует значения по умолчанию для basicHttpBinding (которые ниже), а не ваши значения.

Попробуйте это:

<service name="Service1.IService1"> 
    <endpoint address="" 
      binding="basicHttpBinding" 
      bindingConfiguration="SampleBinding" 
      contract="Service1.IService1"> 
    </endpoint> 
    <host> 
    <baseAddresses> 
     <add baseAddress="http://localhost:50935/Service1.svc"/> 
    </baseAddresses> 
    </host> 
    <!--<endpoint address="http://localhost:50935/Service1.svc" binding="basicHttpBinding"></endpoint>--> 
</service> 

Обратите внимание на использование атрибута bindingConfiguration в приведенном выше примере.

Также обратите внимание, что если вы размещаете службу в IIS, вам не нужен элемент baseAddress, так как основным адресом будет местоположение файла .svc.

ДОБАВЛЕНО

Тот же принцип применим и к конечной точке поведения - его не присвоенного к конечной точке либо - вы должны использовать атрибут behaviorConfiguration для этого:

конфигурации поведения
<service name="Service1.IService1"> 
    <endpoint address="" 
      behaviorConfiguration="behaviorGPLineItemsService" 
      binding="basicHttpBinding" 
      bindingConfiguration="SampleBinding" 
      contract="Service1.IService" /> 

Служба раздел не имеет указанного атрибута name, поэтому он рассматривается как поведение службы по умолчанию и применяется ко всем службам (в этом файле конфигурации), которые явно не задают имя behaviorConfiguration.

Пустое имя = по умолчанию применяется также для конфигураций привязки и конфигураций поведения конечных точек, IIRC.

+0

Я попробую это. Спасибо. –

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