我已经创建了一个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
答案 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。