고객이 제 3 자로부터 제공 한 XML 스키마 문서에서 생성 된 클래스 파일이 있습니다. 이 생성 된 클래스를 고객의 SOAP 웹 서비스에 사용할 수 있어야하지만 몇 가지 문제가 있습니다.WCF SOAP을 사용하여 XmlSerializer를 사용하여 루트 xmlns 추가
두EPSStatus
[ServiceContract(Namespace = "http://theircompany.co.uk/theirapp/v1")]
[XmlSerializerFormat]
public interface IWebService
{
[OperationContract]
EPSStatus serviceNotifyDataEventSet(
[XmlElement(Namespace = "http://www.thirdparty.org/thirdapp")] DataEventSet dataSet
);
}
및 DataEventSet
내 생성 된 클래스 파일에 있습니다 : 나는 다음과 같은 웹 서비스에 연결하기 위해 WCF ChannelFactory
을 사용할 수 있도록
나는 ServiceContract
인터페이스를 만들었습니다. DataEventSet
의 중요한 비트 :
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.thirdparty.org/thirdapp")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.thirdparty.org/thirdapp", IsNullable=false)]
public partial class DataEventSet {
//...
}
지금 나는 다음과 SOAP 본체 (WCF 추적 발견은 자신의 서버에서 사용)받을 IWebService.serviceNotifyDataEventSet
를 호출하려고 :
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<serviceNotifyDataEventSet xmlns="http://theircompany.co.uk/theirapp/v1">
<dataSet>
<dataEvents xsi:type="q1:DAInt" xmlns="" xmlns:q1="http://www.thirdparty.org/thirdapp">
<id>47245361157</id>
<time>
<tick_time>141728877218</tick_time>
<time>2012-06-28T10:07:57.218+01:00</time>
<time_type>OSACBM_TIME_MIMOSA</time_type>
</time>
<value>42</value>
</dataEvents>
<id xmlns="">0</id>
<site xmlns="">
<category>SITE_SPECIFIC</category>
</site>
<time xmlns="">
<tick_time>141728877218</tick_time>
<time>2012-06-28T10:07:57.218+01:00</time>
<time_type>OSACBM_TIME_MIMOSA</time_type>
</time>
</dataSet>
</serviceNotifyDataEventSet>
</s:Body>
그래서, 내가 수 있어요 웹 서비스를 호출하고 내 데이터가 올바르게 직렬화되어있는 것처럼 보이지만 서버 쪽에서는 dataSet
이 null이 될 것입니다. 나는 또한 다음과 같은 신체 작업 않는 클라이언트에서 추적을 가지고 :
<soap:Body>
<serviceNotifyDataEventSet xmlns="http://theircompany.co.uk/theirapp/v1">
<dataSet xmlns="http://www.thirdparty.org/thirdapp">
<dataEvents xmlns:q1="http://www.thirdparty.org/thirdapp" xsi:type="q1:DAReal" xmlns="">
<id>47245361408</id>
<time>
<tick_time>141730618844</tick_time>
<time>2012-06-28T10:36:58.843+01:00</time>
<time_type>OSACBM_TIME_MIMOSA</time_type>
</time>
<value>12.34</value>
</dataEvents>
<id xmlns="">0</id>
<site xmlns="">
<category>SITE_SPECIFIC</category>
</site>
<time xmlns="">
<tick_time>141730618843</tick_time>
<time>2012-06-28T10:36:58.843+01:00</time>
<time_type>OSACBM_TIME_MIMOSA</time_type>
</time>
</dataSet>
</serviceNotifyDataEventSet>
</soap:Body>
내가 볼 수있는 유일한 차이점은 루트 네임 스페이스 작업 패킷에 dataSet
에 설정되어 있습니다 : <dataSet xmlns="http://www.thirdparty.org/thirdapp">
. 내 패킷에서 네임 스페이스가 전혀 지정되지 않았습니다.
제 질문은 제 분석이 합리적이라고 생각하니 그렇다면 루트 xmlns를 내 dataSet
에 올바르게 출력 할 수있는 방법이 있습니까?