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

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

1 Ответ

5 голосов
/ 11 января 2010

Я решил эту проблему, создав новый класс, производный от 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...