.net - opcionales - optional parameter c# string
ParĂ¡metros nombrados y opcionales, y WCF (3)
Estoy trabajando con VS 2017, .Net 4 y un proyecto WcfService. Tengo un servicio como este:
Interfaz:
namespace MyServiceNamespace
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
String GetSomething(int Produkt, DateTime MyDate, char SomeFlag);
}
public class myService : IMyService
{
public String GetSomething(int Produkt, DateTime MyDate, char SomeFlag)
{
if(Produkt==0){Produkt=12345;}
if(MyDate==DateTime.MinValue){MyDate=DateTime.Today;}
if(SomeFlag==''/0''){SomeFlag=''F'';}
return dosomething();
}
}
}
Puedo llamar a esto con http://myserver/myservice.svc/GetSomething?Produkt=1&MyDate=2018-01-01&SomeFlag=A
pero también http://myserver/myService.svc/GetSomething?Produkt=1&MyDate=2018-01-01
o incluso http://myserver/myservice.svc/GetSomething
Los parámetros que faltan se rellenan con el valor "vacío" o predeterminado del tipo. No sé si hay una mejor manera de establecer su propio valor predeterminado, porque
public String GetSomething(int Produkt, DateTime MyDate, char SomeFlag=''F'')
no funcionó, todavía SomeFlag == ''/ 0''
Lo que no he descubierto es cómo puedo saber si el valor está allí porque faltó el parámetro o se llamó con 1.1.0001
Actualización: The Markup MyService.svc:
<%@ ServiceHost Language="C#" Debug="true" Service="MyServiceNameSpace.MyService" CodeBehind="MyService.svc.cs" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory %>
Así que .Net 4 agregó parámetros nombrados y opcionales que son bastante buenos. No necesito hacer tantos métodos de sobrecarga de 1 línea.
¿Funcionará a través de WCF?
WSDL no puede describir parámetros opcionales, por lo que la respuesta es "no".
Ya que estas son semánticas de compilación, diría que no. Sin embargo usted esperaría que trabajen de la siguiente manera.
En el lado del Código de servicio, todo el código aceptaría los parámetros predeterminados.
En el lado del cliente, observo que las herramientas ''Agregar referencia de servicio'' en VS2010 no toman los valores predeterminados y los agregan al proxy generado. Así que tendrías que generar tu propio proxy.
De esta manera, el código del cliente puede usar los valores predeterminados si el valor predeterminado se especifica en la implementación del contrato del lado del cliente.
Sería que lo mismo es cierto para los parámetros nombrados.
En definitiva, sí, pero el material no se transfiere por WCF. Todo lo que sucede es que el proxy del cliente tendrá que enviar a la fábrica de canales como un parámetro adecuado.