다양한 xml serialization 특성으로 장식 된 클래스를 사용하는 WCF 서비스를 노출 할 때 인터페이스에서 XmlSerializerFormat 특성을 사용 했음에도 불구하고 모든 작업 매개 변수의 모든 XmlRoot 특성은 완전히 무시됩니다. 매개 변수의 네임 스페이스는 항상 우리가 지정하는 것이 아니라 서비스의 네임 스페이스입니다.WCF에서 XmlRoot 특성이 무시되는 이유 및이를 극복하는 방법
이렇게하면 ASMX와 호환되지 않는 것처럼 보이며 우리가 BizTalk를 사용하고 있으며 교환 된 XML의 모양을보다 엄격하게 제어해야하기 때문에 문제가 발생합니다.
몇 가지 질문에 다음 -
- 아무도이 결정 뒤에 근거 이 무엇인지 아는 사람?
- 아무도 모른다. 어때? 나는 이 경우가 오는 방법 XmlRoot 을 제안 WCF에서, XmlSerializerFormat 속성과 함께, 가 유형에는 직렬화하기 위해 XmlSerialiser를 사용하는 인상이 고려되어야한다, 아래에 있었다? (이 계정으로 는 SOAP 봉투를 복용 만 인해 그 사실에 되면, 매개 변수는 근절되지 않는 이유는 무엇입니까?)
- 대부분의 을 중요하게 - - 즉, 사람은 '문제를 강제'할 수있는 방법이 경우 알고 매개 변수를 우리가 선택한 네임 스페이스가되도록하십시오.
나는 this 게시물을 본 적이 있지만 나는 내 질문에 관련이 생각하지 않는다 - 바그너 실 베이라의 요청에 따라
-
[ServiceContract(Namespace = "http://servicecontract"),
XmlSerializerFormat(Style = OperationFormatStyle.Document)]
public interface ITestService
{
[OperationContract]
MyOtherType MyTestMethod(MyType obj);
}
// Composite class for DCS and XMLS
[Serializable, XmlType, XmlRoot(Namespace = "http://datacontract")]
public class MyType
{
[XmlAttribute]
public string StringValue { get; set; }
}
// Composite class for DCS and XMLS
[Serializable, XmlType, XmlRoot(Namespace = "http://datacontract")]
public class MyOtherType
{
[XmlAttribute]
public string OtherStringValue { get; set; }
}
- 내가 사용하는 계약이이 테스트
Thanks John 우리는 MessageContract 옵션을 찾았습니다. 그냥 ASMX에서 작동했던 뭔가에 대한 번거 로움처럼 보입니다. 그 이유는 루트가 아닌 노드 인수에 대해서는 확신 할 수 없었지만, 말이된다. 개인적으로 저는 그것이 이전 버전과의 호환성에 큰 타격이라고 생각합니다. –