Использование веб-API WCF (REST) ​​для поддержки потоковых данных - PullRequest
0 голосов
/ 09 мая 2011

У меня следующая проблема.Позвольте мне описать шаги, которые я предпринял до сих пор ...

  1. Я создал новое приложение службы WCF в Visual Studio
  2. Затем я обновил проект с помощью Nuget, чтобы получить последние веб-httplibs (webapi.dll)
  3. Затем я создал сервисный метод, который выглядит следующим образом

`

[ServiceContract]
public interface IService
{
        [OperationContract]
        [WebInvoke(Method="POST", UriTemplate="{value}")]
        string GetData(int value, Stream inputDocument);
}

`

Теперь пытаюсьпросмотр my .svc в обозревателе приводит к ошибке « Для запроса в операции GetData быть потоком операция должна иметь один параметр, тип которого Stream »

Я знаю, что это проблема с конфигурацией, я просто не знаю, что нужно изменить в web.config Имейте в виду, это было распространенной проблемой в WCF перед новымПоддержка HTTP, я несколько удивлен, что это не работает из коробки с новыми API.

Любые указатели?

Спасибо

[ПРАВИТЬ] Я 'я включил мой конфиг ...

<system.serviceModel>
    <services>
      <service name="MyService.Service" behaviorConfiguration="serviceBehaviour">
        <endpoint behaviorConfiguration="endPointBehaviour" address="" binding="webHttpBinding" contract="MyService.IService"/>
      </service>
    </services>    
    <bindings>
      <webHttpBinding>
        <binding transferMode="Streamed" name="webHttpBinding" />
      </webHttpBinding>
    </bindings>

    <behaviors>
      <endpointBehaviors>
        <behavior name="endPointBehaviour">
          <webHttp/>
        </behavior>
      </endpointBehaviors>

      <serviceBehaviors>
        <behavior name="serviceBehaviour">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>    
  </system.serviceModel>

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Вы смешиваете новый материал WCF Web API со старым материалом WCF REST.Взгляните на образец HttpHelloResource в качестве простейшего примера того, как запустить службу веб-API под IIS, или в моем блоге , где показан еще более простой пример службы, работающей в консоли..

Что касается принятия потока, я думаю, что самым простым вариантом будет операция, подобная этой:

[ServiceContract]
public interface IService
{
        [OperationContract]
        [WebInvoke(Method="POST", UriTemplate="{value}")]
        string GetData(int value, HttpRequestMessage request);
}

, и вы можете получить поток, выполнив

var stream = request.Content.ContentReadStream
0 голосов
/ 09 мая 2011

Хорошо, похоже, сообщение об ошибке выводило меня на неверный путь. Я думаю, что сообщение об ошибке должно быть гораздо более наглядным. По сути, в моем коде нет ничего плохого, просто нет смысла указывать моему браузеру файл .svc, так как сервис не совсем сервис WCF. Я добиваюсь этого, идя вперед и получая доступ к сервису через код. И это работает. Спасибо за помощь

...