2017-05-04 63 views
0

我正在嘗試從URL中讀取WSDL以動態生成WCF服務的代理。 這是我的代碼:如何從C#中的URL讀取WCF服務的WSDL

XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(description)) 
if (ServiceDescription.CanRead(xmlTextReader)) 
{ 
    ... 
} 

我從法ServiceDescription.CanRead得到一個XmlException
錯誤消息是「根層數據無效,第1行,第1位」。

瀏覽IE中的WDSL URL,我可以在標籤<wsdl:definitions ...> ... </wsdl:definitions>之前看到下面的標籤,它不會出現在瀏覽器中。

<?xml version="1.0" encoding="UTF-8"?>

莫非是這個問題?但我想ServiceDescription.CanRead應該能夠認識到這一點。任何提示將不勝感激。

+0

如何檢查正在讀取的XML? 'CanRead'只是在XmlSerializer的內部實例上調用'CanDeserialize'並返回該值。 –

+1

你在IE中看到的xml聲明是可選的,但是有效的。 [http://stackoverflow.com/questions/7007427/does-a-valid-xml-file-require-an-xml-declaration](http://stackoverflow.com/questions/7007427/does-a-valid- xml-file-require-an-xml-declaration) –

+0

這可能是一個額外的隱藏字符,它會阻止XML的解析。 [http://stackoverflow.com/questions/17947238/why-data-at-the-root-level-is-invalid-line-1-position-1-for-xml-document/24513288](http:// stackoverflow.com/questions/17947238/why-data-at-the-root-level-is-invalid-line-1-position-1-for-xml-document/24513288) –

回答

1

嘗試納入你的問題的第一行前添加此:

var byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); 
if (description.StartsWith(byteOrderMarkUtf8)) 
{ 
    var lastIndexOfUtf8 = byteOrderMarkUtf8.Length - 1; 
    description = description.Remove(0, lastIndexOfUtf8); 
} 

here借來的。

+0

我最初刪除了這個,因爲它大多是從其他人的答案複製並粘貼到另一個瑣碎編輯的問題。 OP將有機會嘗試刪除它。 –

+0

謝謝Scott,那是個問題。現在修好! –