문제

나는 다음과 유사한 복합 객체를 반환하는 WCF 웹 서비스를 구축하고 있습니다.

    [DataContract]
    public class WebServiceReturn
    {
        ...

        [DataMember]
        public XmlElement Results { get; set; }

        ...
    }

다음 코드로 WebServicEreTurn 객체를 반환하면 모든 것이 정상입니다.

    XElement cities = new XElement("Cities",
                          from r in results
                          select new XElement("City", r));            

    using (XmlReader xmlReader = cities.CreateReader())
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlReader);
        WebServiceReturn response = new WebServiceReturn();
        response.Results = xmlDoc.DocumentElement;
    }

그러나 아래 코드를 사용하는 경우 XMLDATADOcument를 반환하는 저장된 프로 시저 호출 결과에서 XMLELEMENT를 취하는 경우 CommunicationException이 발생합니다 (내부 예외가 없음).

XmlDataDocument xdd = DataAccess.ExecuteXML("MyStoredProc", parameter);
response.Results = xdd.DocumentElement;

혼란스러운 부분은 xmldatadocument.documentElement (xmlelement)를 Xlement로 변환 한 다음 XmlElement로 다시 변환하면 문제가 없기 때문에 다음 코드는 문제없이 반환됩니다.

        XmlElement xe = DataAccess.ExecuteXML("MyStoredProc", parameter).DocumentElement;
        XDocument xDoc = new XDocument();
        using (XmlWriter xmlWriter = xDoc.CreateWriter()){
            xe.WriteTo(xmlWriter);
        }

        using (XmlReader xmlReader = xDoc.Root.CreateReader())
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlReader);
            response.Results = xmlDoc.DocumentElement;
        }   

CommunicationException 세부 사항은 다음과 같습니다.

CommunicationException : 서버는 의미있는 답변을 제공하지 않았습니다. 이는 계약 불일치, 조기 세션 종료 또는 내부 서버 오류로 인해 발생할 수 있습니다.

또한 테스트 응용 프로그램에서 서비스 참조를 여러 번 업데이트하여 효과가 없었습니다.

웹 서비스를 호출하는 테스트 코드의 문제가 있습니까? xmlelement를 Xlement로 변환 한 다음 Xmlelement로 다시 문제를 해결하는 이유는 무엇입니까? 모든 정보는 전혀 감사하겠습니다! :)

도움이 되었습니까?

해결책

나는 이상한 점을 모른다 XmlDataDocument, 그러나 당신은 반드시 필요하지는 않습니다 XDocument - 노력하다:

XmlDocument newDoc = new XmlDocument();
newDoc.Load(new XmlNodeReader(doc.DocumentElement));
return newDoc.DocumentElement;

여전히 이상적이지는 않지만 더 깨끗해 보입니다 ...

다른 팁

글쎄, 더 많은 오류 정보를 얻으려면 서버의 결함에서 디버깅 세부 사항을 활성화해야합니다. 지금 당장 받고있는 메시지는 기본적으로 일반적이고 공개 할 수없는 공인 WCF 오류 메시지입니다. 말하기 : 뭔가 잘못되었습니다.

이를 위해서는 서비스 구성을 조정해야합니다.이 섹션을 추가하십시오 (아직없는 경우).

<behaviors>
  <serviceBehaviors>
    <behavior name="MEXandDebug">
      <serviceMetadata />
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

그런 다음 서비스 정의에서 해당 섹션을 참조하십시오.

<services>
  <service behaviorConfiguration="MEXandDebug" name="WCFService.MyWCFService">

그것은 당신에게 더 의미있는 오류를 줄 것이며, 이는 당신에게 무엇이 잘못되었는지 알 수 있기를 바랍니다.

그렇지 않으면 서버 측 코드를 디버깅하고 그곳에서 무슨 일이 일어나고 있는지 찾아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top