Сложный тип недоступен в 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. В чем моя проблема?

Спасибо, Арефин

Ответы

Ответ 1

Да, это нормально для WCF. По умолчанию WCF будет показывать только операции в самом WSDL - структуры данных документируются в файлах XSD, связанных с WSDL файлом.

Я уверен, что если вы посмотрите на свой 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 для получения дополнительной информации об этом.