2017-07-12 12 views
2

公開レートを取得するには、公開Webサイト(http://www.tcmb.gov.tr/kurlar/201707/10072017.xml)からXMLファイルをダウンロードする必要があります。 しかしXMLにはXMLスタイルシート処理命令が含まれているので問題があります。BizTalk 2010 WCF処理命令を削除する

<?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" > 

私は、bLogicalのwebHttpBindngとBizTalk RESTスターターキットでWCFカスタムポートを使用します。すべて正常に動作しますが、着信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を解析することなく、私のメッセージの内容にアクセスする方法を知っていますか?私は、その行を削除するか、パーサーが無視する方法を見つけることを試みています。

+0

を少し追加CreateBufferedCopy()メソッドを使用しているときに取得しているエラーは何ですか? –

+0

上記と同じエラーです。 System.Xml.XmlException:処理命令(XML宣言以外)およびDTDはサポートされていません。 2行目、2行目。 –

+0

このコードはどこで実行されていますか?受信パイプラインのデコードセクションでは?また、そのコードはスタイルシート情報を削除しないようです。 – Dijkgraaf

答えて

0

私は最後に解決策を見つけました。メッセージインスペクタの代わりに、オンラインで見つけることができる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); 
    } 
関連する問題