【问题标题】:How to prevent .Net SOAP Serialization from eating NewLines如何防止 .Net SOAP 序列化吃掉 NewLines
【发布时间】:2011-05-29 10:05:21
【问题描述】:

我通过 Visual Studio 从 WSDL 生成的包装类使用 .Net 中的内置 SOAP 支持。
现在,当我调用包装器上的其中一个方法并传递一个包含带有 CRLF (\r\n) 的字符串的对象时,只有 LF (\n) 将在服务器上结束。反之亦然。当服务器发送一个包含 CRLF 的字符串时,包装器只会吐出 LF。

我知道这是一个通常可以通过向XmlSerializer 提供自己的XmlWriter 来避免的问题,但我找不到可以在提供的框架中指定类似内容的地方。

我几乎想使用this thread 中提供的 RegEx 解决方案,但我很难相信没有任何东西可以防止这个问题。

【问题讨论】:

    标签: c# .net soap newline


    【解决方案1】:

    取自here

        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 );
        }
    

    【讨论】:

    • 我知道通用 XML 序列化的解决方案。但在这种情况下,我不是进行序列化的人。它发生在 .Net 框架内。所以我看不到可以提供自定义 XmlWriterSettings 的地方。
    【解决方案2】:

    使用 SoapExtension 转义流向服务 (SoapMessageStage.AfterSerialize) 的流中的回车。

    This answer 指向一个很好的资源来解释how to implement one on v1.1 的 SOAP 内容;其他示例是那些将ProcessMessage 覆盖为remove invalid XML characterslog the entire SOAP conversation 的示例。 (配置涉及SoapExtensionAttribute 将扩展与 Web 引用相关联,通常在 web.config 中设置。)

    【讨论】:

      【解决方案3】:

      为了完整起见,我没有找到提供我正在寻找的解决方案。所以对我来说最好的解决方案是使用this answer中提出的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 2022-12-14
        • 2010-09-07
        • 2011-01-21
        • 2019-05-07
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多