WCF - не было прослушивания конечной точки

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

СООБЩЕНИЕ: превышена квота максимального размера входящих сообщений (65536). Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize в соответствующем элементе привязки.

Я использовал упрощенную конфигурацию по умолчанию для своих служб WCF, поэтому добавил новое определение службы следующим образом:

<system.serviceModel>
<services>
  <service name="MyNamespace.MyService">
    <endpoint address="MyService.svc"
      binding="basicHttpBinding" bindingConfiguration="basicHttp"
      contract="MyNamespace.IMyService" />
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="10485760"
             maxBufferSize="10485760"
             maxBufferPoolSize="10485760">
      <readerQuotas maxDepth="32"
           maxArrayLength="10485760"
           maxStringContentLength="10485760"/>
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  ...
</behaviors>
<protocolMapping>
    ...
</protocolMapping>    

The way I consume my services is, I have a function returning a channel in my helper class, and I use that channel to call the operations:

public static T CreateChannel<T>() where T : IBaseService
{
    System.ServiceModel.BasicHttpBinding binding= new System.ServiceModel.BasicHttpBinding();

    binding.TransferMode = TransferMode.Streamed;
    binding.Security = new BasicHttpSecurity() { Mode = BasicHttpSecurityMode.None };
    binding.MaxReceivedMessageSize = 10485760;
    binding.MaxBufferSize = 10485760;

    System.ServiceModel.ChannelFactory<T> cf2 = new ChannelFactory<T>(binding, 
             new System.ServiceModel.EndpointAddress(MyEndpointAddress)); //I checked this part, the address is correct.
    T Channel= cf2.CreateChannel();
    return Channel;
}

а потом,

var businessObject = WcfHelper.CreateChannel<IMyService>();
var operationResult = await businessObject.MyOperationAsync(...);

Несмотря на то, что другие мои службы работают правильно, тот, который я определил в конфигурации, явно возвращает исключение «Не было прослушивания конечной точки ...» Я разрабатываю на VS2012 с использованием IISExpress. В чем может быть проблема, есть предложения?


person F. Erken    schedule 01.10.2012    source источник


Ответы (1)


Думаю, есть несоответствие режиму передачи. На стороне клиента вы используете потоковую передачу, тогда как на стороне сервера ее нет в конфигурации. Вдобавок вы указали 10 МБ, что не так уж и много.

Посетите это для получения дополнительной информации о потоковой передаче.

Изменить:

Если вы размещаете на IIS, также проверьте (по умолчанию 4 МБ):

<system.web>    
    <httpRuntime maxRequestLength="4096 " />
</system.web>
person Cybermaxs    schedule 01.10.2012
comment
Спасибо за статью, но настройка режима передачи не имеет значения, я просто пробовал разные вещи + файл, который я передаю в качестве параметра, намного больше 65536 байт и меньше 10 МБ. - person F. Erken; 01.10.2012