Как предотвратить сериализацию .Net SOAP от употребления NewLines - PullRequest
2 голосов
/ 22 декабря 2010

Я использую встроенную поддержку SOAP в .Net через класс-оболочку, сгенерированный Visual Studio из WSDL.
Теперь, когда я вызываю один из методов в оболочке и передаю объект, содержащий строку с CRLF (\r\n), на сервере останется только LF (\n). То же самое происходит и наоборот. Когда сервер отправляет строку, содержащую CRLF, оболочка будет выплевывать только LF.

Я знаю, что это проблема, которую обычно можно избежать, предоставив собственный XmlWriter для XmlSerializer, но я не могу найти место, где я мог бы указать что-то подобное в предоставленной среде.

Я почти хочу использовать решение RegEx, предоставленное в этой теме , но мне трудно поверить, что нет ничего, что могло бы предотвратить эту проблему.

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Просто ради полноты, я не нашел решения, обеспечивающего то, что я искал.Таким образом, лучшим решением для моего случая было решение, предложенное в этом ответе .

0 голосов
/ 12 декабря 2011

Используйте SoapExtension , чтобы избежать возврата каретки в потоке, направляемом в службу ( SoapMessageStage.AfterSerialize ).

Этот ответ указывает на хороший ресурс, объясняющий , как реализовать один на v1.1 материала SOAP; другие примеры - это те, которые переопределяют ProcessMessage на , удаляют недопустимые символы XML или регистрируют весь диалог SOAP . (Конфигурация включает SoapExtensionAttribute , связывающий расширение с веб-ссылкой, обычно настраиваемый в web.config.)

0 голосов
/ 22 декабря 2010

Взят от здесь

    XmlWriterSettings ws = new XmlWriterSettings();
    ws.NewLineHandling = NewLineHandling.Entitize;

    XmlSerializer ser = new XmlSerializer( typeof( Abc ) );
    using (XmlWriter wr = XmlWriter.Create( "abc.xml", ws ))
    {
        ser.Serialize( wr, s );
    }
...