2012-04-29 6 views
14

Utworzono usługę WCF, ale usługa WSDL nie wyświetla moich klas (typy złożone).typ złożony nie jest dostępny w wcf wsdl

Poniżej jest usługa:

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

    [OperationContract] 
    ShipmentReply CreateFedExShipment(RxRdShipment shipment); 
} 

A moja definicja klasy jest:

[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; } 
} 

Moim problemem jest to, że nie znaleźliśmy tego ShipmentReply klasę w WSDL. Jaki jest mój problem?

Dziękuję Arefin

Odpowiedz

28

Tak, to normalne dla WCF. Domyślnie WCF pokaże tylko operacje w samym WSDL - struktury danych są udokumentowane w plikach XSD, które są połączone z plikiem WSDL.

założę jeśli spojrzeć na WSDL, zobaczysz coś podobnego do tego prawie na szczycie swojej 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> 

Są to linki do plików XSD potrzebne - Wpisz Adres URL do przeglądarki, a jeden z nich (najprawdopodobniej ten z najwyższym numerem - ale nie musi to być taki) będzie zawierać definicję typu złożonego.

Spróbuj URL w przeglądarce (przystosowania portu i rzeczywisty adres URL, co masz):

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

to powinno dać ci XSD dla typu złożonego

Ta funkcja spowodował pewne problemy w ciągu ostatnich lat - niektórzy klienci nie mogą sobie z tym poradzić (w 100% poprawna i doskonała) składnia. Tak więc w .NET 4.5 WCF będzie miał nowy parametr (...?singlewsdl), aby wyprowadzić cały plik WSDL zawierający wszystkie elementy XSD - więcej informacji na ten temat można znaleźć w artykule What's new in WCF 4.5? A single WSDL file.

+0

Masz rację, dziękuję. Czy możesz mi powiedzieć jedno ... kiedy używam właściwości klasy, która nie jest datacontract, to muszę użyć __BackingField, czy jest jakakolwiek korzyść lub cokolwiek innego, co znasz .. –

+0

Jeśli używasz '[DataContract] & [DataMember] 'attributes - używaj ich wszędzie, gdzie chcesz! To najłatwiejszy i najbezpieczniejszy sposób - cokolwiek innego to hack. –

+1

Dziękuję bardzo. –