您的服务合同接口就是这样 - 服务器将接受的内容与客户端需要遵守的内容之间的正式合同。此合约以 wsdl 的形式序列化为 XML - 因此出现在合约中的任何数据类型都必须以 XML 中的序列化形式表示。
在您的情况下,您的服务调用的参数数量没有明确定义:它可能有 0、1、2... 等等。面向服务的租户之一是合同需要明确 - 这不是。
最“惯用”的方法(在面向服务的上下文中)如下:
[ServiceContract]
public interface IRestService {
[OperationContract]
[WebGet(UriTemplate = "operations/{values}")]
void Operations(string[] values);
}
正如这个答案中所建议的,如果你想在客户端添加一些语法糖,你可以创建一个扩展方法,它使用params
关键字来使客户端体验更容易消化。
编辑:
正如Tom所指出的,上述合同将不起作用。您需要将操作更改为 POST(如Tom's answer所示),或者将参数字符串设为您在服务器端解开的分隔符以生成数组:
[ServiceContract]
public interface IRestService {
[OperationContract]
[WebGet(UriTemplate = "operations/{delimitedValues}")]
void Operations(string delimitedValues);
}