我有一个由我们的客户从第三方提供的 XML Schema 文档生成的类文件。我应该能够将这个生成的类用于客户的 SOAP Web 服务,但是我遇到了一些问题。
我创建了一个ServiceContract
接口,因此我可以使用 WCFChannelFactory
连接到 Web 服务,如下所示:
[ServiceContract(Namespace = "http://theircompany.co.uk/theirapp/v1")]
[XmlSerializerFormat]
public interface IWebService
{
[OperationContract]
EPSStatus serviceNotifyDataEventSet(
[XmlElement(Namespace = "http://www.thirdparty.org/thirdapp")] DataEventSet dataSet
);
}
两者EPSStatus
都DataEventSet
在我生成的类文件中。的重要部分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 {
//...
}
当我现在尝试调用时,IWebService.serviceNotifyDataEventSet
我得到以下 SOAP 正文(在他们的服务器上启用了 WCF Trace 时发现):
<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>
因此,我可以调用 Web 服务,看起来好像我的数据正在正确序列化,但是在服务器端dataSet
却是空的。我还从一个与以下主体一起工作的客户那里得到了跟踪:
<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 在我的 xmlns 上正确输出dataSet
?