2014-04-09 18 views
12

this ve this gibi yayınları gördüm, ancak bunların her biri birkaç yaşında.İsteğe bağlı parametreleri WCF hizmet yönteminde kullanabilir misiniz?

Böyle bir şey yapabilir miyim?

[OperationContract] 
    [FaultContract(typeof(MyCustomFault))] 
    List<InventoryPart> SelectMany(string partialPartNumber, string division = null); 
+6

Bilmiyorum; yapabilir misin? (Başka bir deyişle - deneyin) –

+6

@Tom W - hiçbir şey için teşekkürler, denedim ve işe yaramış gibi görünüyor ama okuduğum her yer, DanielCuadra'nın (sizinki gibi) cevabını da içeren hayır diyor. – BBauer42

cevap

29

Yapamazsınız. WCF'de yöntem imzaları ile ilgili birçok kısıtlama vardır; bazı kısıtlamalar, host mekanizması ve diğerleri WSDL/MEX nedeniyle.

WCF'nin hizmet kodunuzu ve aşırı yüklenmiş yöntemleri ve diğer birçok şeyi varsayılan parametrelere sahip olmanıza izin vermesine rağmen, hizmeti verdiğinizde başlayabilir veya başlatılabilir veya çalışmaya başlayabilir, ancak işe yarayabilir. Bu zor.

Bunun üstesinden gelmek için yaptığım şey, gerektiğinde nealable parametreleri kullanmam, sonra istemci kodumda her zaman otomatik olarak oluşturulmuş istemci proxy'ye erişen bir hizmet katmanım var; Servis katmanım istediğim tüm aşırı yüklenmelere ve isteğe bağlı paramize sahip. Örnek (kirli kodu):

WCF hizmeti: (benim tarafımdan yazılmamış autogenerated vekil, ama bir)

[OperationContract] 
[FaultContract(typeof(MyCustomFault))] 
List<InventoryPart> SelectMany(string partialPartNumber, string division, int? subDivision, bool? isActive); 

Müşteri Servis Katmanı

public List<InventoryPart> GetParts(string partialPartNumber){ 
    return GetParts(partialPartNumber, null); 
} 

public List<InventoryPart> GetParts(string partialPartNumber, string division){ 
    return GetParts(partialPartNumber, division, null); 
} 

public List<InventoryPart> GetParts(string partialPartNumber, string division, int? subDivision){ 
    return GetParts(partialPartNumber, division, subDivision, null); 
} 

public List<InventoryPart> GetParts(string partialPartNumber, string division, int? subDivision, bool? isActive){ 
    // This method is the one that actually calls the client proxy channels and all. 
} 

Müvekkilim uygulaması İstemci Hizmet Katmanı'nı tüketir

public void LoadPartNumbers(){ 
    var parts = ClientServiceLayer.GetParts(this.txtPartNumber.Text, null, (int) this.cboDivisions.SelectedItem); 
} 
+0

Her seferinde bu değişikliği yapmak ve saklamak zordur, çünkü her seferinde yöntem imzası eklediğinizde/değiştirdiğinizde servis referansını güncellememiz gerekebilir. Bir kişi şirketten ayrılırsa ve yeni bir geliştirici gelirse ne olur? –

+0

Sorunuzu anladığımdan emin değilim. Bu geçici çözüm, temel olarak WCF hizmetinizin tek bir evrensel yönteme (aşırı yükleme yok) sahip olduğunu ve istemci-hizmet katmanınızın tüm aşırı yüklenmelere sahip olduğunu ve aşırı yüklenmelerden yalnızca birinin Service Reference otomatik olarak oluşturulan proxy yöntemini çağırdığını gösterir. – DanielCuadra

İlgili konular