WCF вводит огромный XML как поток с Content-Type: xml/text

У меня есть веб-сервис RESTful WCF, который обрабатывает огромные XML-файлы, которые передаются в виде потока с заголовком Content-Type: text/text с использованием метода POST. Когда клиент пытается использовать этот веб-сервис с заголовком Content-Type: text/xml, он получает "... содержит нераспознанное значение формата тела http" Xml ". Ожидаемое значение формата тела -" Raw ". Это может быть, потому что WebContentTypeMapper не был настроен на привязке "ошибка. Мне поручено заставить этот веб-сервис работать с заголовком Content-Type: text/xml, так как множество клиентов используют эти веб-сервисы с другими сервисами и не хотят менять тип контента только для этого сервиса. Как мне сопоставить входящий поток как WebContentFormat.Raw и заставить этот веб-сервис принимать Content-Type: text/xml? Спасибо.

1 ответ

Решение

Я решил эту проблему, создав новый класс, производный от WebContentTypeMapper, и изменив WebContentFormat на "Raw", когда Content-Type = "text/xml". Наряду с этим новым классом я обновил web.config для использования элемента "customBinding" в разделе "bindings".

public class XmlContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat
               GetMessageFormatForContentType(string contentType)
    {
        if (contentType.Contains("text/xml") ||  contentType.Contains("application/xml"))
        {
            return WebContentFormat.Raw;
        }
        else
        {
            return WebContentFormat.Default;
        }
    }
}

web.config

<bindings>
  <customBinding>
    <binding name="XmlMapper">
      <webMessageEncoding webContentTypeMapperType="Lt.Trigger.XmlContentTypeMapper, ExService" />
      <httpTransport manualAddressing="true" />
    </binding>
  </customBinding>
</bindings>
Другие вопросы по тегам