如何使我的WCF消息合同显示在导入的模式中?

时间:2010-09-23 22:19:53

标签: c# wcf wsdl schema xsd

客户向我们提供了他们想要开发的服务的模式和wsdl。当我跳上项目时,已经有了一个服务实现。当我在IE中提取svc文件时,它会显示正常的svcutil命令等。当我向下钻取并查看我们正在使用的wsdl导入的模式时,我注意到MessageContracts没有显示在架构。我可以做些什么来使MessageContracts显示出来,以便模式是标准的?

例如,客户给了我们这个,

<xs:schema elementFormDefault="qualified" targetNamespace="http://ws.tcore.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.tcore.com">
<xs:import schemaLocation="ATISDataContracts.xsd" namespace="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
<xs:import schemaLocation="Serialization.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
<xs:element name="ASICDetectorInventoryRequestMC">
 <xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="DetectorInventoryRequest" nillable="true" type="q1:DetectorInventoryRequestDC" xmlns:q1="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
 </xs:sequence>
 </xs:complexType>
 </xs:element>
  <xs:element name="ConnectionRequest" nillable="true" type="q2:ConnectionRequestDC" xmlns:q2="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 

但是当我从我的svc向下钻取wsdl,并且我复制/粘贴模式导入时,我注意到消息合同丢失了,尽管“q1:”等是正确的。我的架构看起来像这样。

  <xs:schema elementFormDefault="qualified" targetNamespace="http://ws.tcore.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.tcore.com">
<xs:import schemaLocation="http://localhost:9305/mex?xsd=xsd1" namespace="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
<xs:import schemaLocation="http://localhost:9305/mex?xsd=xsd0" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
<xs:element name="DetectorInventoryRequest" nillable="true" type="q1:DetectorInventoryRequestDC" xmlns:q1="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
<xs:element name="ConnectionRequest" nillable="true" type="q2:ConnectionRequestDC" xmlns:q2="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 

在大多数情况下它看起来都一样。如何让我的MessageContract元素出现在架构中?

以下是邮件合同c#code

的示例
namespace tcore.ATISDataContracts
{
  [MessageContract(IsWrapped = false)]
  public class ASICDetectorInventoryRequestMC
  {
      [MessageHeader]
      public ConnectionRequestDC ConnectionRequest;

      [MessageBodyMember]
      public DetectorInventoryRequestDC DetectorInventoryRequest;
  }
}

他们的模式显示了复杂类型,但我的派生模式只显示元素而不是复杂类型。我在这做错了什么?任何帮助或提示表示赞赏。

感谢您的帮助,
〜在圣地亚哥

1 个答案:

答案 0 :(得分:1)

默认情况下,在生成WSDL文件时,模式的一部分会被拆分为其他导入文件,这些文件可能与最初可能使用的导入(例如,在客户端提供的WSDL文件中)不一致。如果您导航到导入的XSD文件(例如,http:// localhost:9305 / mex?xsd = xsd1),您应该找到一些您似乎缺少的元素。