2009-06-26 18 views
7

için WCF üzerinden bir web hizmeti oluşturduk gerek yoktur. Sonra bir .NET 2.0 uygulaması ile kullanılabilir hale getirmek için bir web hizmeti olarak ortaya koydu. DataMontract'la, açığa çıkan OperationContract tarafından kullanılabilecek bazı DataContract dosyaları oluşturdum.Neden Bir Web Servisi Datamember en Belirtilen Özellik int ve Veriler için ayarlanmış olması ancak dize

ben DataClass oluşturmaya çalıştığınızda her DataContract nitelik şimdi her üye için bir ortak "Belirtilen" özelliğini sahip web hizmetinde geçirilecek dikkat edin. Örneğin

:

[DataContract] 
public class Sales 
{ 

    [DataMember] 
    public int InvoiceNo; 

... 
} 

Ben web hizmeti istemci Satış örneğini oluşturmak

. InvoiceNo ve InvoiceNoSpecified adlı özelliği alıyorum.

Şimdi burada benim sorum var, öznitelik tür dizgisi olduğunda, karşılık gelen "Belirtilen" özniteliğini true olarak ayarlamam gerekmiyor, ancak öznitelik türü int veya DateTime olduğunda, "Belirtilen" özniteliğine karşılık gelen, web hizmeti ana bilgisayarında değer null olur. Belirtilen özniteliği belirlemekten kaçınmanın bir yolu var mı? Çünkü kodumda bir çok yerde web servis işlevlerini çağırmam gerekiyor. Hepsini takip etmek gerçekten zor olurdu.

cevap

3

Sen açıklama here okuyabiliyordu. den

Alıntı: şema varsayılan bir değer, içerir

bir şema opsiyonel (minOccurs = '0') olduğuna dair bir unsuru içeriyorsa, ya eğer iki seçenek var. Aşağıdaki kodda gösterildiği gibi bir seçenek ise varsayılan değeri belirtmek için kullanım System.ComponentModel.DefaultValueAttribute etmektir. Başka bir seçenek , oluşturmak için XmlSerializer tarafından tanınan bir Boolean alanı oluşturmak ve alana XmlIgnoreAttribute uygulamak için özel bir desen kullanmaktır. desen propertyNameSpecified şeklinde oluşturulur. Örneğin, eğer "MyFirstName" adlı bir alan vardır ayrıca "MyFirstName" adlı XML öğesi oluşturmak isteyip XmlSerializer'ı talimat adlı "MyFirstNameSpecified" bir alan yaratacak.

sadece kabul edilebilir benim için şimdiye kadar geldim geçici çözüm XmlSerializerFormatAttribute kullanarak XmlSerializer'ı yerine DataContractSerializer kullanmaktır. Eğer DataMember özelliği için [DataMember(isRequired=True)]

+0

Bu sefer için DefaultValueAttribute kullanmaya çalıştı. Varsayılan değeri kullandığımda, istemcide tarih parametresinin değerini ayarlansam bile olur.Artık dateSpecified = true set vermedi beri tarih değeri her zaman varsayılan değerdir. istemcide // kod prm.DepositDate = dtp_Deposit.Value.Date; hizmet de // kodu [DefaultValue (typeof (DateTime), "1900/01/01")] halka DEPOSITDATE; – Nap

+0

Teşekkürler adamım. Ben python soaplib hizmet ve .net müşterilerle aynı problem vardı. Hep true Belirtilen ayarlamak zorunda kaldı. Burada Python düzeltmek için nasıl bir örnektir: @rpc (soap_types.Int (min_occurs = 1), _returns = soap_types.String) – Elalfer

1

şunlardır:

bool EmitDefaultValue (default true) 
bool IsRequired (default false) 

Eğer teşhir edilmektedir özelliği kullanması gereken null olmayan bir değer türü ise:

[DataMember(IsRequired = true)] 
public int InvoiceNo; 
8

varsayılan parametreleri kullanabilirsiniz Ayrıca

İlgili konular