Добавление параметров строки запроса в операцию службы WCF, которая принимает поток - PullRequest
0 голосов
/ 20 января 2011

Есть ли способ настроить службу WCF webHttpBinding для приема нескольких строк запроса аргументов, с аргументом Stream, являющимся телом запроса?

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

UriTemplate казалось очевидным выбором, но это приводит только к исключениям несоответствия AddressFilter.

Перемещение аргументов в MessageContract с атрибутами MessageHeader во всех полях, отличных от Stream, во избежание ошибки «Stream может быть единственным аргументом», приводит к ошибке, что атрибуты MessageHeader не поддерживаются с webHttpBinding.

Оставив только аргумент Stream в MessageContract, я сообщаю, что потоки не поддерживаются в MessageContracts для WebScriptEnablingBehavior.

Есть мысли?

1 Ответ

1 голос
/ 20 января 2011

Решение этого вопроса:

  1. Отметьте операцию с атрибутом [WebInvoke], который имеет Method="POST" и UriTemplate, который включает ваши непотоковые аргументы в строке запроса
  2. Установить привязку конечной точки на webHttpBinding
  3. Добавьте <webHttp/> к поведению вашей конечной точки конфигурации
  4. Установите transferMode="Streamed" в конфигурации привязки вашей конечной точки

И некоторые вещи, о которых следует знать:

  • wsHttpEndPoint и basicHttpEndPoint не поддерживают сочетание потоковых и не потоковых аргументов. Если вам требуется SOAP + webHttpBinding, вам потребуется использовать два служебных интерфейса и две конечные точки (хотя конкретная реализация может использоваться совместно)
  • Генератор WSDL также не поддерживает его, поэтому вам необходимо отключить mex на конечной точке webHttp, иначе при доступе к странице справки будет сгенерировано исключение (хотя вызов службы все равно будет нормальным)
...