在为WCF实现接口时,不能使用可选参数

Kon*_*ten 14 c# wcf interface optional-parameters

在我的界面中,我宣布了这一点.

[OperationContract]
[WebGet]
String GetStuff(String beep, String boop = "too lazy to type");
Run Code Online (Sandbox Code Playgroud)

我实现如下.

String GetStuff(String beep, String boop = "too lazy to type") { ... }
Run Code Online (Sandbox Code Playgroud)

它编译并上传为我的WCF服务.但是,当我将它用作Web引用并尝试执行下面的代码时,我得到了编译器抱怨和哭泣没有带有单个参数签名的方法.最后一行是问题所在.

那么我怎么可能懒得 默认输入

ServiceClient client = new ServiceClient();
client.GetStuff("blobb", "not lazy");
client.GetStuff("blobb");
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 24

简单地说:不支持默认参数.

通过设计和理性.我们使用C#来编写WCF合同,但这是一个符号技巧.并非每个C#语言功能都可以在SOAP,REST或JSon中实现.


Mez*_*Mez 14

你可以尝试这个,重载功能.

[OperationContract]
MyResponse GetData(); 

[OperationContract(Name = "GetDataByFilter")]
MyResponse GetData(string filter);
Run Code Online (Sandbox Code Playgroud)

然后另一种选择是使用a DataContract而不是多个参数,并IsRequired在适当的DataMembers 上设置为false ,就像在这个问题中解释的那样.