c# - ¿Se pueden usar parámetros opcionales en un método de servicio WCF?
optional-parameters (1)
Usted no puede Hay muchas restricciones en WCF con respecto a las firmas del método; algunas restricciones se deben al mecanismo del host y otras al WSDL / MEX.
A pesar del hecho de que WCF podría potencialmente permitirle tener parámetros predeterminados en su código de servicio y métodos sobrecargados y muchas otras cosas, cuando aloja su servicio, podría comenzar o no, o podría comenzar pero podría o no funcionar. Es complicado.
Lo que he hecho para superar esto, es que utilizo parámetros que admiten nulos siempre que sea necesario, luego en mi código de cliente siempre tengo una capa de servicio que accede a mi proxy de cliente generado automáticamente; Mi capa de servicio tiene todas las sobrecargas y los parámetros opcionales que quiero. Ejemplo (código sucio):
Servicio WCF:
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division, int? subDivision, bool? isActive);
Capa de servicio al cliente (no el proxy generado automáticamente, sino uno escrito por mí)
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.
}
Mi aplicación cliente consume la Capa de Servicio al Cliente
public void LoadPartNumbers(){
var parts = ClientServiceLayer.GetParts(this.txtPartNumber.Text, null, (int) this.cboDivisions.SelectedItem );
}
Esta pregunta ya tiene una respuesta aquí:
- Parámetros nombrados y opcionales, y WCF 3 respuestas
He visto publicaciones como this y esta, pero cada una tiene algunos años.
¿Puedo hacer algo como esto?
[OperationContract]
[FaultContract(typeof(MyCustomFault))]
List<InventoryPart> SelectMany(string partialPartNumber, string division = null);