【问题标题】:BizTalk 2010 WCF Remove processing instructionBizTalk 2010 WCF 删除处理指令
【发布时间】:2017-07-12 07:48:24
【问题描述】:

我需要从公共网站 (http://www.tcmb.gov.tr/kurlar/201707/10072017.xml) 下载 XML 文件以获取汇率。 但是我有一个问题,因为 XML 包含一个 xml-stylesheet 处理指令。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="isokur.xsl"?>
<Tarih_Date Tarih="07.07.2017" Date="07/07/2017"  Bulten_No="2017/131" >

我将 WCF 自定义端口与 bLogical 的 webHttpBindng 和 BizTalk REST 入门工具包一起使用。一切正常,但是当我尝试解析传入的 xml 时,该处理指令出现错误。

System.Xml.XmlException:不支持处理指令(XML 声明除外)和 DTD。第 2 行,位置 2。

我不确定解决此问题的最佳方法是什么。我尝试遵循本指南WCF Errors on XML Deserialization,但是当我尝试使用 CreateBufferedCopy 方法访问消息内容时它仍然失败。

 using (var readStream = new System.IO.MemoryStream())
 {
      using (var buffer = reply.CreateBufferedCopy(int.MaxValue))
      {
         buffer.WriteMessage(readStream);
      }

      readStream.Position = 0;
      xdoc.Load(readStream);
 }

有人知道我如何在不实际解析 XML 的情况下访问我的消息内容吗?我只是想找到一种方法来删除该行或让解析器忽略它。

【问题讨论】:

  • 使用 CreateBufferedCopy() 方法时遇到的错误是什么?
  • 与上述相同的错误。 System.Xml.XmlException:不支持处理指令(XML 声明除外)和 DTD。第 2 行,位置 2。
  • 您在哪里执行该代码?在接收管道的解码部分?此外,该代码似乎没有删除样式表信息
  • 这是我在 WCF 配置中使用的自定义客户端消息检查器。我只发布了部分代码,因为我什至没有达到可以删除该行的步骤。如果您想了解更多信息,请点击链接。那是我用来创建消息检查器的帖子。

标签: wcf biztalk biztalk-2010


【解决方案1】:

最后我自己找到了解决方案。我没有使用消息检查器,而是基于您可以在网上找到的 CustomTextMessageEncoder 创建了一个消息编码器。 在 ReadMessage 方法中我只是添加了一点代码

  public override Message ReadMessage(System.IO.Stream stream, int maxSizeOfHeaders, string contentType)
  {
      XmlReaderSettings xsettings = new XmlReaderSettings();
      xsettings.IgnoreProcessingInstructions = true;
      XmlReader reader = XmlReader.Create(stream,xsettings);
      return Message.CreateMessage(reader, maxSizeOfHeaders, this.MessageVersion);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多