2017-05-04 5 views
0

WCF 서비스의 프록시를 동적으로 생성하기 위해 URL에서 WSDL을 읽으려고합니다. 내가 방법 ServiceDescription.CanRead에서 XmlException를 얻을C#의 URL에서 WCF 서비스의 WSDL을 읽는 방법

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

: 이 내 코드입니다.
오류 메시지는 "루트 레벨의 데이터가 유효하지 않습니다. 라인 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, 그게 문제였습니다. 지금 고쳐! –