15

我创建了 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; }
}

我的问题是我没有ShipmentReplyWSDL. 我的问题是什么?

谢谢你,阿雷芬

4

1 回答 1

32

是的,这对 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 元素 - 请参阅WCF 4.5 中的新增功能?一个单一的 WSDL 文件以获得更多信息。

于 2012-04-29T09:41:32.180 回答