Ответ 1
Вы не можете. Существует много ограничений на WCF в отношении сигнатур метода; некоторые ограничения связаны с механизмом хоста, а другие - из-за WSDL/MEX.
Несмотря на то, что WCF потенциально может позволить вам иметь параметры по умолчанию в вашем служебном коде и перегруженные методы и многое другое, когда вы размещаете свою службу, она может или не запускаться, или она может запускаться, но может или не работать. Это сложно.
Что я сделал, чтобы преодолеть это, так это то, что я использую нулевые параметры везде, где это необходимо, а затем в моем клиентском коде всегда есть уровень сервиса, доступ к моему автогенерированному клиентскому прокси; мой сервисный уровень имеет все перегрузки и необязательные параметры, которые я хочу. Пример (грязный код):
Служба WCF:
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division, int? subDivision, bool? isActive);
Уровень обслуживания клиентов (не автогенерированный прокси, а один написанный мной)
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.
}
Мое клиентское приложение потребляет уровень обслуживания клиентов
public void LoadPartNumbers(){
var parts = ClientServiceLayer.GetParts(this.txtPartNumber.Text, null, (int) this.cboDivisions.SelectedItem );
}