Не удалось отправить изображение (byte []) в качестве параметра службы WCF - PullRequest
1 голос
/ 02 марта 2011

Я написал какой-то сервис, у которого есть метод, который получает изображение (byte []) в качестве параметра (return void).

Я также написал некоторый клиент (клиент и сервер, работающий на одной машине - разные sulotion - с использованием IIS), который отправляет растровое изображение (как байт []) в службу - и каждый раз, когда я пытаюсь отправить, я получаю исключение:

Произошла ошибка при получении ответа HTTP на http://localhost/WebService/Service.svc. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы)

Я добавил еще один метод, который получает void и возвращает int - и я могу вызвать этот метод без проблем.

Что может быть не так? Мне нужно определить что-то особенное в справочнике по обслуживанию клиентов?

Способ обслуживания

[ServiceContract]
**public interface IService**
{
    [OperationContract]
    void GetPic( byte[] pic );
}

**public class Service : IService**
{
    public void GetPic( byte[] pic )
    {
          ...   
    }
 }

Файл Web.config:

 <system.serviceModel>
<services>
  <service behaviorConfiguration="ServiceBehavior" name="ServiceProxy.Service">

    <endpoint 
      name="basicHttp"
      address="" 
      binding="basicHttpBinding" 
      bindingConfiguration=""
      contract="Contracts.IService">
    </endpoint>

    <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" >
    </endpoint>

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/ServiceProxy/" />
      </baseAddresses>
    </host>

  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="True"/>       
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

1 Ответ

3 голосов
/ 02 марта 2011

Вы должны настроить привязку на сервере для приема больших сообщений.По умолчанию он принимает только сообщения размером до 65 КБ и массивы с элементами 16 КБ = в вашем случае растровое изображение, размер которого не превышает 16 КБ.

Используйте это в файле web.config (на стороне сервера):

<bindings>
  <basicHttpBinding>
    <binding name="myBinding" maxReceivedMessageSize="1000000">
      <readerQuotas maxArrayLength="1000000" />
    </binding>
  </basicHttpBinding>
</bindings>

В вашей конфигурации конечной точки укажите эту привязку в атрибуте bindingConfiguration, установив для нее myBinding.

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