Wcf очень маленький размер пакета - PullRequest
2 голосов
/ 18 января 2011

Я включил wcf basicHttpBinding с TransferMode, установленным в «Streaming».
Проблема заключается в том, что каждый раз, когда я выполняю операцию чтения из потока на стороне клиента, я читаю ровно 1536 байт, что является кадром Ethernet.
Как я могу заставить свою службу wcf отправлять большие пакеты данных навремя?

РЕДАКТИРОВАТЬ

Итак, по-видимому, по умолчанию BytesPerRead - 4096, однако я изменил это значение как на клиенте, так и на сервере.вот файл конфигурации

Кроме того, я нашел сообщение без ответа, посвященное той же проблеме
WCF maxBytesPerRead ограничение до 4096

Сервер SERVER

(обратите внимание, что у меня есть две конечные точки, одна для загрузки контента в basicHttpBinding, а другая для связи с использованием ws2007HttpBinding, я имею в виду конечную точку basicHttpBinding в моем вопросе)

<system.serviceModel>
 <bindings>
   <basicHttpBinding>
     <binding name="MyBasicHttpBinding" allowCookies="true" maxBufferSize="955366"
   maxBufferPoolSize="964285" maxReceivedMessageSize="955556" messageEncoding="Mtom"
   transferMode="Streamed">
   <readerQuotas maxDepth="60" maxStringContentLength="955556" maxArrayLength="955556"
   maxBytesPerRead="955556" maxNameTableCharCount="955556" />
  </binding>
  </basicHttpBinding>
  <ws2007HttpBinding>
  <binding name="MyBinding" allowCookies="false">
   <security mode="None" />
  </binding>
  </ws2007HttpBinding>
 </bindings>
 <services>
  <service behaviorConfiguration="ContentManagementServiceBehavior"
  name="App_Code.Services.ContentManagement.ContentManagementService">
  <clear />
  <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"
   listenUriMode="Explicit" />
  <endpoint binding="ws2007HttpBinding" bindingConfiguration="MyBinding"
   name="ws2007Endpoint" contract="App_Code.Services.ContentManagement.IContentManagementService"
   listenUriMode="Explicit" />
  <endpoint address="/download" binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding"
   name="basicHttpBinding" contract="App_Code.Services.ContentManagement.IContentManagementDownlodService" />
  <host>
   <baseAddresses>
   <add baseAddress="/Services/ContentManagement/ContentManagementService.svc" />
   </baseAddresses>
  </host>
  </service>
 </services>
        <behaviors>
  <serviceBehaviors>
  <behavior name="ContentManagementServiceBehavior">
   <serviceMetadata httpGetEnabled="true" />
   <serviceDebug includeExceptionDetailInFaults="true" />
  </behavior>
  </serviceBehaviors>
 </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    </system.serviceModel>

CLIENT

    <system.serviceModel>

  <bindings>

   <basicHttpBinding>

    <binding name="basicHttpBinding" closeTimeout="00:10:00" openTimeout="00:10:00"

     receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false"

     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

     maxBufferPoolSize="92429000" maxReceivedMessageSize="65536000" messageEncoding="Mtom"

     textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true">

     <readerQuotas maxDepth="90" maxStringContentLength="65536000" maxArrayLength="65536000"

      maxBytesPerRead="655360" maxNameTableCharCount="65536000" />

     <security mode="None" />

    </binding>

   </basicHttpBinding>

   <wsHttpBinding>

    <binding name="ws2007Endpoint" closeTimeout="00:01:00" openTimeout="00:01:00"

     receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"

     transactionFlow="false" hostNameComparisonMode="StrongWildcard"

     maxBufferPoolSize="524288646" maxReceivedMessageSize="65536646"

     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"

     allowCookies="false">

     <readerQuotas maxDepth="32" maxStringContentLength="819264564"

      maxArrayLength="163846764" maxBytesPerRead="40964543" maxNameTableCharCount="16384564" />

     <reliableSession ordered="true" inactivityTimeout="00:10:00"

      enabled="false" />

     <security mode="None">

      <transport realm="" />

     </security>

    </binding>

   </wsHttpBinding>

  </bindings>

  <client>

   <endpoint address="<absolute address>"

    binding="wsHttpBinding" bindingConfiguration="ws2007Endpoint"

    contract="ContentManagementServiceReference.IContentManagementService"

    name="ws2007Endpoint" />

   <endpoint address="<absolute address>"

    binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"

    contract="ContentManagementServiceReference.IContentManagementDownlodService"

    name="basicHttpBinding" />

  </client>

 </system.serviceModel>

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Вы можете попытаться изменить maxBytesPerRead свойство:

<bindings>
    <basicHttpBinding>
        <binding name="Streamed" TransferMode="Streamed" TextEncoding="Mtom"
            maxMessageReceivedSize="4000000">
            <readerQuotas mexBytesPerRead="8192" />
        </binding>
    </basicHttpBinding>
</bindings>
0 голосов
/ 18 января 2011

Посмотрите на эту ветку: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/e1f7b040-39a8-4ca8-9def-96b2b47c0d6f/

Здесь есть несколько вариантов, которые, я думаю, подойдут для вашей проблемы.

Спасибо,

Роберто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...