Потоковая передача WCF — 400 неверный запрос

Я кружил вокруг настройки службы потоковой передачи в течение последних нескольких дней, и каждый раз, когда я возвращаюсь к задаче, я продолжаю сталкиваться с одной и той же стеной из 400 неверных запросов. Я искал несколько сообщений здесь и в Интернете, и кажется, что это частая проблема, но каждая ситуация отличается. Ниже приведено текущее состояние моих настроек привязок — я чувствую, что это должно быть что-то маленькое, что я упускаю из виду.

Информация от профилировщика WCF:

  • При вызове службы выдается предупреждение о том, что «контекст оценки конфигурации не найден».
  • Следующая запись гласит: «Подходящий тег службы не найден. Добавлены конечные точки по умолчанию».

Это заставляет меня поверить, что все, что я настроил, не применяется к службе, и, следовательно, выдает ошибку Bad Request, потому что она использует значение по умолчанию ~ 64 КБ, которое превышает мой поток.

      <!-- Services Config -->
        <system.web>
        <httpRuntime maxRequestLength="2097150" executionTimeout="7200"/>
        <compilation debug="true" targetFramework="4.0" />    
        </system.web>
    <system.serviceModel>
    <bindings>
      <basicHttpBinding>        
          <binding name="StreamingService"  maxReceivedMessageSize="2147483647"  maxBufferSize="2147483647" transferMode="Streamed" >
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
            <security mode="None">
            </security>
          </binding>        
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="StreamingService" behaviorConfiguration="StreamingServiceBehavior">
          <endpoint address="http://localhost:50577/StreamingContent.svc"
         binding="basicHttpBinding" bindingConfiguration="StreamingService"
         contract="IStreamingContent" name="BasicHttpBinding_IStreamingContent" />
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

       <!-- Web Server Config -->
        <bindings>
        <basicHttpBinding>
  <binding name="BasicHttpBinding_IStreamingContent" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483647"
           maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
    </basicHttpBinding>
    </bindings>    
    <client>
        <endpoint address="http://localhost:50577/StreamingService.svc"
             binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IStreamingService"
            contract="StreamingService.IStreamingService" name="BasicHttpBinding_IStreamingService" />
        </client>

Любые свежие взгляды, безусловно, помогут.

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

Мысли?


person buildtehawesome    schedule 19.12.2012    source источник


Ответы (2)


Я думаю, что одна из причин вашей проблемы заключается в том, что вы настраиваете конечную точку, используя раздел <client> на стороне сервера, хотя на самом деле вы должны использовать раздел <services> для настройки конечной точки службы. См. пример файла конфигурации сервера для потоковой передачи здесь http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/streaming-in-wcf/

Будьте очень осторожны с вашими конфигурационными файлами, именно здесь возникает большинство проблем в WCF.

person Maksym Strukov    schedule 19.12.2012
comment
Вздох - да, я думаю, что это направило меня в правильном направлении. Настроить его в разделе клиента мне показалось неправильным. Получит эту работу и сообщит вам. Заранее спасибо. - person buildtehawesome; 19.12.2012
comment
Хотя я чувствовал, что это выровняет корабль, что-то все еще неясно. - person buildtehawesome; 20.12.2012

Для будущих читателей.

Я получил сообщение «Не найден соответствующий тег. Добавлены конечные точки по умолчанию».

Мой xml был в порядке. (после того, как я потратил час, пытаясь найти искаженный xml).

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

Ключ вот в чем.

В файле .svc есть некоторая разметка

<%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.MyNamespace.MyConcreteService" %>

Это должно быть ПОЛНОЕ имя класса .cs.

И

ваша модель обслуживания xml также должна иметь полное имя.

  <service name="MyCompany.MyNamespace.MyConcreteService"
           behaviorConfiguration="MyServiceBehavior"
           >

        <!-- 
        Whole bunch of other stuff not shown here
        -->

  </service>

Вышеприведенное будет имитировать класс

namespace MyCompany.MyNamespace
{
    public class MyConcreteService : IMyService
    {
    }
}

Убедитесь, что у вас есть ПРАВИЛЬНОЕ полное имя, И они правильно скопированы в файл .svc И правильно XML.

Получил ответ отсюда:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/3bb9b3ad-8fc4-40a6-9bb8-fb34f9011d39/bad-request-error-when-uploading-file-to-server?forum=wcf

Возможно, элемент не распознается WCF. Значение атрибута «имя» в элементе должно быть полным именем класса службы — поскольку вы используете IIS для размещения службы, оно должно совпадать со значением атрибута «Сервис» в @ Тег ServiceHost в файле .svc.

person granadaCoder    schedule 21.12.2016