命名和可选参数,以及WCF

时间:2010-04-15 23:32:13

标签: .net wcf .net-4.0 optional-parameters named-parameters

所以.Net 4添加了命名和可选参数,非常甜蜜。我不需要制作尽可能多的1行重载方法。

这会对WCF有用吗?

3 个答案:

答案 0 :(得分:31)

WSDL无法描述可选参数,因此答案是“否”。

答案 1 :(得分:20)

由于这些是编译器语义,我会说不。但是你希望它们能够以下面的方式工作。

在服务代码方面,所有代码都接受默认参数。

在客户端,我注意到VS2010上的“添加服务引用”工具不采用默认值并将它们添加到生成的代理中。所以你必须生成你自己的代理。

通过这种方式,如果在客户端合同实现中指定了默认值,则客户端代码可以使用默认值。

我认为命名参数也是如此。

总而言之,是的,但这些东西不是通过WCF传播的。所有这一切都是客户端代理必须作为适当的参数发送到通道工厂。

答案 2 :(得分:0)

我正在使用VS 2017,.Net 4和WcfService项目,我有一个像这样的服务:

接口:

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();
  }

}
}

我可以这样称呼 http://myserver/myservice.svc/GetSomething?Produkt=1&MyDate=2018-01-01&SomeFlag=A

但也 http://myserver/myService.svc/GetSomething?Produkt=1&MyDate=2018-01-01

甚至 http://myserver/myservice.svc/GetSomething

缺少的参数用类型的“空”或默认值填充。 我不知道是否有更好的方法来设置自己的默认值,因为

public String GetSomething(int Produkt, DateTime MyDate, char SomeFlag='F')

不起作用,仍然SomeFlag =='\ 0'

我还没有发现如何确定该参数是否存在,因为该参数丢失了,或者被称为1.1.0001

更新:标记MyService.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="MyServiceNameSpace.MyService" CodeBehind="MyService.svc.cs" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory  %>