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>