2012-04-29 11 views
14

Bir WCF hizmeti oluşturdum, ancak WSDL hizmeti sınıflarımı (karmaşık türleri) göstermiyor. Aşağıda karmaşık tür wcd içinde kullanılabilir değil wsdl

hizmettir:

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

    [OperationContract] 
    ShipmentReply CreateFedExShipment(RxRdShipment shipment); 
} 

Ve sınıf tanımı şöyledir:

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

Sorunum WSDL bu ShipmentReply sınıf bulamadık olduğunu. Benim sorunum nedir?

,

cevap

28

Evet, bu WCF için normaldir arefin teşekkür ederiz. Varsayılan olarak, WCF sadece WSDL'nin kendisindeki işlemleri gösterecektir - veri yapıları WSDL dosyasına bağlı XSD dosyalarında belgelenmiştir.

ben size WSDL bakarsanız, az daha WSDL üstündeki buna benzer bir şey göreceksiniz bahse girerim

: Bu gerekli XSD dosyaların bağlantıları olduğunu

<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> 

- türü içinde URL’ler tarayıcınıza ve bunlardan bir tanesi (büyük olasılıkla en yüksek sayıya sahip olanı - ancak bu olmak zorunda değil) karmaşık tip tanımınızı içerecektir.

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

Bu karmaşık türü için size XSD vermelidir Bu özellik bazı sorunlara neden olduğunun

:

tarayıcınızda bu URL'yi (ne varsa liman ve gerçek URL'sini adapte) Deneyin Geçtiğimiz yıllarda - bazı müşteriler bu (% 100 doğru ve mükemmel) sözdizimi ile baş edemez. Böylece, .NET 4.5'te, WCF'nin tüm XSD öğeleri dahil olmak üzere tüm WSDL'nizi çıkarmak için yeni bir parametresi (...?singlewsdl) olacaktır - bununla ilgili daha fazla bilgi için bkz. What's new in WCF 4.5? A single WSDL file.

+0

Haklısınız, Teşekkür ederim. Ben DataContract olmayan bir sınıfın bir özelliği kullandığınızda .. bana bir şey söyleyebilir, o zaman __BackingField kullanmak zorunda, sen .. –

+0

sen [DataContract] 'kullanıyorsanız bildiğiniz herhangi yararı ya da başka bir şey var mı & [DataMember] 'özellikleri - ihtiyacınız olan her yerde kullanın! En kolay ve en güvenli yol budur - başka bir şey bir hack. –

+1

Çok teşekkür ederim. –

İlgili konular