문제

현재 구현

SQL Server 2005 유형 XML의 MessageXML이라는 열이있는 메시지라는 테이블이있는 데이터베이스.

C# 라이브러리 프로젝트 LINQ에서 SQL 클래스가있는 Class는 유형의 Xlement의 MessageXML이라는 필드가있는 메시지를 생성하는 클래스를 생성합니다.

WCF WebService 유형 Xlement의 MessageXML이라는 속성으로 MessagePayLoad 클래스를 노출시키는 WCF WebService.

WebService는 LINQ에서 SQL에서 만든 메시지 클래스를 제공하지 않습니다. 나는 가벼운 물체를 간격으로 사용합니다.

의문

Xlement는 실제로 WCF 서비스에서 사용하고 싶은 유형이거나 더 나은 유형이 있습니다. 서비스에 전달 된 XML은 전체 문서 여야합니다. 또한 XML 문서를 Xlement로로드하는 데 약간의 문제가 있습니다. 서비스의 경량 클래스에서 전체 XML 문서 유형을 노출해야한다고 생각하지만 XDocument와 XMLDocument의 차이점에 대해 약간 혼란스러워합니다.

또한 Xdocument 유형의 속성으로 WCF 메시지 클래스를 노출시킬 수 없습니다. 직렬화 할 수없는 XDECLARATION 유형의 속성이 포함되어 있기 때문입니다.

XMLDocument를 사용하는 경우 LINQ 클래스와 Lightweight Class 사이의 번역에서 XML 유형의 이상한 변환을 수행해야합니다.

 XmlDocument doc = new XmlDocument();
 doc.LoadXml(message.MessageXml.ToString());

 MessageEnvelope retVal = new MessageEnvelope()
 {
      MessageXml = doc,
 };

xmldocument는 올바른 것 같아서 번역을해야하지만 가능한 한 적절한 곳에 가깝게되기를 원합니다.

도움이 되었습니까?

해결책

xlement 또는 xmlelement를 사용할 수 있습니다.

public XmlElement GetXmlElement()
{
    var doc = new XmlDocument();
    doc.Load(PREFIX + @"Enumerations.wsdl");

    return doc.DocumentElement;
}

public XElement GetXElement()
{
    var doc = XDocument.Load(PREFIX + @"Enumerations.wsdl");
    return doc.Root;
}

당신도 원하지 않습니다 XDocument ...도 아니다 XmlDocument. 당신이 반환하는 것은 비누 봉투가 포함 된 XML 문서의 중간에있을 것임을 기억하십시오. 문서 안에 문서가 없으므로 원하는 것은 요소입니다.

다른 팁

John Saunders는 여기서 돈을 벌고 있습니다. 약간 자세히 설명하기 위해, 당신이 반환 할 때 생성되는 WSDL을 보면 XmlElement 또는 XElement, 당신은 다음과 같은 것을 볼 수 있습니다 :

<xs:complexType>
  <xs:sequence>
    <xs:any minOccurs="0" processContents="lax"/>
  </xs:sequence>
</xs:complexType>

그게 다야. 기본적으로 모든 XML이 여기에 갈 수 있음을 의미합니다. 또한 Chansik의 제안과는 달리 리턴 유형을 .NET 특정 유형에 바인딩하지는 않습니다.

예, 문자열을 사용할 필요가 없습니다.

클래스를 직렬화하는 데 필요한 유형을 사용하십시오 (문자열은 항상 나에게 잘 작동했습니다). 그런 다음 서버 또는 클라이언트 측에서 필요할 때 문서의 무결성을 유지하기 위해 변환을 수행하십시오. 하나 이상의 Xelements에서 XDocument를 구축 할 수 있으므로 Xlement와 함께 이동합니다.

최악의 경우, 수업의 직렬화 동작을 무시할 수도 있습니다 (반사에 능숙하다면 너무 끔찍하지 않음).

XMLDocument는 이전의 비 LINQ 문서입니다. 그들은 다른 클래스에서 구현 된 것과 동일한 개념입니다.

일반적으로 XDocument 그리고 XElememnt 바람직합니다 XmlDocument 그리고 XmlElement 성능 측면에서.

그러나 나는 사용하는 것이 좋습니다 string 다음과 같은 이유로 WCF 서비스를 통해 XML 문서를 보내려면 다음과 같은 이유가 있습니다.

  1. 상호 운용성
    • 클라이언트는 특정 .NET Framework 버전에 연결되어 있지 않습니다 (클라이언트는 사용을 선택할 수 있습니다. XDocument 또는 XmlDocument. WCF 서비스가 그러한 방식으로 구성되는 한 Java 기반 클라이언트조차도 지원할 수 있습니다).
  2. 원본 XML 문서에 포함 된 경우 XML 선언을 올바르게 처리합니다.

참고 : 큰 XML 문서를 지원하기 위해 구성을 적절하게 조정하십시오. 예를 들어, basicHttpBinding기본 최대 메시지 크기는 64KB입니다.

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