WCF - maxReceivedMessageSize - PullRequest
       7

WCF - maxReceivedMessageSize

2 голосов
/ 21 декабря 2010

У меня проблема с настройкой maxReceivedMessageSize для больших файлов.

Я получаю:

Максимальная квота размера сообщения для входящих сообщений (65536) было превышены. Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize на соответствующий обязательный элемент.

Вот моя конфигурация на стороне сервера:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="HTTPBaseAddress" value="http://localhost:8080/WelcomeMessage/"/>
    <add key="HTTPFileTransferAddress" value="http://localhost:8080/FileTransfer/"/>
  </appSettings>
  <system.web>
    <compilation debug="false" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <system.serviceModel>
    <services>
      <service name="FS.Services.MessageService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint contract="FS.Interfaces.IMessageService" address="" binding="wsHttpBinding"/>
    </service>
      <service name="FS.Services.FileTransferService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint contract="FS.Interfaces.IFileTransferService" address="" binding="basicHttpBinding" bindingConfiguration="streamedHttpBinding"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="streamedHttpBinding" 
                 messageEncoding="Text" 
                 transferMode="Streamed" 
                 maxReceivedMessageSize="400000000"/>
       </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Вот моя конфигурация на стороне клиента:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="" binding="wsHttpBinding" contract="FS.Services.IMessageService"
        name="FS.Services.MessageService" />
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="streamedHttpBinding"
        contract="FS.Services.IFileTransferService" name="FS.Services.FileTransferService" />
    </client>
    <bindings>
      <basicHttpBinding>
        <binding name="streamedHttpBinding" maxReceivedMessageSize="400000000"
          messageEncoding="Text" transferMode="Streamed"/>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Вот как я подключаю клиента:

BasicHttpBinding binding2 = new BasicHttpBinding("streamedHttpBinding");
EndpointAddress endpoint2 = new EndpointAddress("http://localhost:8080/FileTransfer");
ChannelFactory<IFileTransferService> channelFactory2 = new ChannelFactory<IFileTransferService>(binding2, endpoint2);
IFileTransferService proxy2 = channelFactory2.CreateChannel();
((IClientChannel)proxy2).Open();

Также я хотел бы передавать файлы любого типа до 500 МБ, используя потоковые сообщения. Может ли кто-нибудь предоставить мне конфигурацию (или решение), которая бы это поддерживала?

Thanx!

1 Ответ

3 голосов
/ 21 декабря 2010

Конфигурация на стороне клиента не имеет тега <client>, который бы ссылался на сервер и к которому вы могли бы применить конфигурацию привязки с увеличенным размером сообщения ......

На вашем сервер на стороне, вам нужно определить службу и ее конечные точки:

<services>
   <service name="YourNamespace.YourServiceClass">
       <endpoint name="endpoint1"
                 address="http://server:8888/YourService.svc" 
                 binding="basicHttpBinding"
                 bindingConfiguration="lageMessageTransfer"
                 contract="IYourServiceContract" />
   </service>
</services>

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

<client>
   <endpoint name="Default"
             address="http://server:8888/YourService.svc" 
             binding="basicHttpBinding"
             bindingConfiguration="lageMessageTransfer"
             contract="IYourServiceContract" />
</client>

Обновление: хорошо, теперь я вижу, что ваша конфигурация в порядке - но где ваша конечная точка клиента подключается к ??Вы не определили address=!

 <client>
    <endpoint name="FS.Services.FileTransferService" 
              address="" 
              binding="basicHttpBinding" 
              bindingConfiguration="streamedHttpBinding"
              contract="FS.Services.IFileTransferService" />
 </client>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...