复杂类型在wcf wsdl中不可用

时间:2012-04-29 08:16:46

标签: wcf wsdl

我已经创建了一个WCF服务,但是服务WSDL没有显示我的类(复杂类型)。

以下是服务:

[ServiceContract]
public interface IFedexService
{
    [OperationContract]
    ShipmentReply CreateMultiFedExShipment(RxRdShipment shipment);

    [OperationContract]
    ShipmentReply CreateFedExShipment(RxRdShipment shipment);
}

我的班级定义是:

[DataContract]
public class ShipmentReply
{
    [DataMember]
    public string ReferenceNumber { get; set; }

    [DataMember]
    public string MasterTrackingNumber { get; set; }

    [DataMember]
    public List<ReplyPackage> Packages { get; set; }

    [DataMember]
    public bool Response { get; set; }

    [DataMember]
    public RxNotification Notification { get; set; }
}

我的问题是我在ShipmentReply找不到此WSDL课程。我的问题是什么?

谢谢你, Arefin

1 个答案:

答案 0 :(得分:30)

是的,这对WCF来说是正常的。默认情况下,WCF将仅显示WSDL本身中的操作 - 数据结构记录在链接到WSDL文件的XSD文件中。

我打赌如果你看一下你的WSDL,你会在WSDL的顶部看到类似的东西:

<xsd:schema targetNamespace="http://tempuri.org/Imports">
  <xsd:import schemaLocation="http://localhost:8000/HelloIndigo?xsd=xsd0" 
              namespace="http://tempuri.org/" /> 
  <xsd:import schemaLocation="http://localhost:8000/HelloIndigo?xsd=xsd1"  
              namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
  <xsd:import schemaLocation="http://localhost:8000/HelloIndigo?xsd=xsd2" 
              namespace="http://schemas.datacontract.org/2004/07/WCF_Simple_Service" /> 
</xsd:schema>

这些是指向所需XSD文件的链接 - 在浏览器中键入URL,其中一个(很可能是编号最高的那个 - 但不一定是那个)将包含您的复杂类型定义

在浏览器中尝试使用此URL(根据您拥有的内容和实际URL进行调整):

http://localhost:8080/HelloIndigo?xsd=xsd2

这应该为您提供复杂类型的XSD

这个功能在过去几年中引起了一些问题 - 一些客户无法处理这种(100%正确且完全正确)的语法。因此在.NET 4.5中,WCF将有一个新参数(...?singlewsdl)来输出整个WSDL,包括所有XSD元素 - 有关此更多信息,请参阅What's new in WCF 4.5? A single WSDL file