BizTalk 2010 WCF 删除处理指令

BizTalk 2010 WCF Remove processing instruction

我需要从 public 网站 (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: Processing instructions (other than the XML declaration) and DTDs are not supported. Line 2, position 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 的情况下访问我的消息内容吗?我只是想找到一种方法来删除该行或让解析器忽略它。

最终我自己找到了解决方案。我没有使用消息检查器,而是基于您可以在网上找到的 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);
  }