Служба WCF только получает 65536 только размер String.Length, не более - PullRequest
0 голосов
/ 25 июня 2018

Я создал службу WCF, которая получает String (Text / Json) в качестве запроса, но проблема в том, что она может принимать только длину строки 65536 (String.Length).Я попытался ниже (связывание maxReceivedMessageSize = "2147483647") путем поиска в Google, но нет никаких изменений, он может только получить 65536 размера String.Length только не более того.Я новичок в словах dotNet и WCF, может кто-нибудь помочь мне отправить большие данные в эту службу (я хотел отправить около 10 МБ данных в мою службу WCF).

   My Server Config:

   <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="[my-service-name]">
            <endpoint address="http://localhost:8005/MyService"
                  binding="webHttpBinding"
                  contract="[my-service-contract-name]"/>
          </service>
        </services>
        <bindings>
          <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647"
            maxBufferSize="2147483647"
            maxBufferPoolSize="2147483647">
              <readerQuotas maxDepth="32"
              maxArrayLength="2147483647"
              maxStringContentLength="2147483647"/>
            </binding>
          </basicHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
      <startup> 
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      </startup>
    </configuration>


    My Service:

        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "MyService")]
        void MyService(String input)
        {
            Console.WriteLine("Request data = " + input.Length);
        }



Client Config:    

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="name-here" maxReceivedMessageSize="2147483647">
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behavior-here">
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

атрибут привязки для вашей службы установлен в webHttpBinding, и вы добавляете такие атрибуты, как maxReceivedMessageSize, в basicHttpBinding.Я считаю, что это просто по умолчанию для атрибутов webHttpbinding.Я бы порекомендовал создать привязку под вашей httpBinding и внести все необходимые изменения maxReceivedMessageSize под вашу новую привязку и привязать к вашей службе имя привязки, как показано ниже:

  <basicHttpBinding>
    <binding name="testMessageBinding" maxReceivedMessageSize="30000000" openTimeout="00:00:02" receiveTimeout="00:00:02" sendTimeout="00:00:02" closeTimeout="00:00:02">
          <readerQuotas maxDepth="32"
          maxArrayLength="2147483647"
          maxStringContentLength="2147483647"/>
    </binding>
  </basicHttpBinding>

Надеюсь, это поможета также прочитайте приведенную ниже ссылку, чтобы получить дополнительные сведения о пользовательских привязках, предоставляемых системой и т. д., если вы не просматривали ссылку

https://docs.microsoft.com/en-us/dotnet/framework/wcf/system-provided-bindings

0 голосов
/ 25 июня 2018
In your config, please add
"<dataContractSerializer maxItemsInObjectGraph="2147483647"/>"

Service Config:
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Client Config:
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
...