相关疑难解决方法(0)

在WCF Web编程模型中,如何使用查询字符串参数数组(即具有相同名称)编写操作契约?

使用WCF Web编程模型可以指定操作合同,如下所示:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SomeRequest?qs1={qs1}&qs2={qs2}")]
XElement SomeRequest1(string qs1, string qs2);
Run Code Online (Sandbox Code Playgroud)

现在,如果我们必须签订一个接受具有相同名称的参数数组(在这种情况下为qs1)的合同,那么......

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SomeRequest?qs1={qs1}&qs1={qs2}")]
 XElement SomeRequest2(string qs1, string qs2);
Run Code Online (Sandbox Code Playgroud)

当我们调用方法时,我们在运行时收到错误消息:

查询字符串必须具有唯一名称的"name = value"对.请注意,名称不区分大小写.有关更多详细信息,请参阅UriTemplate的文档.

如何定义一个HTTP服务,该服务使用参数数组公开资源,而不需要使用loosey-goosey接口?

rest wcf web-services contract operation-contract

13
推荐指数
2
解决办法
2万
查看次数

使用WCF使用REST服务 - 可选的查询字符串参数?

我在尝试使用WCF使用简单服务时遇到问题.到目前为止,除了实现可选的查询字符串参数之外,一切都进展顺利.界面看起来有点像这样:

[ServiceContract]
[XmlSerializerFormat]
public interface IApi
{
    [OperationContract]
    [WebGet(UriTemplate = "/url/{param}?top={top}&first={first}")]
    object GetStuff(string param, int top, DateTime first);
}
Run Code Online (Sandbox Code Playgroud)

然后通过创建一个继承的类来消耗它ClientBase<IApi>.我尝试了几种方法使参数可选:

1)使参数可以为空

这没用.我从QueryStringConverter另一个问题得到一条消息:WCF服务合同可以有一个可以为空的输入参数吗?

2)URL末尾的一个参数

因此,我考虑将UriTemplate更改为更通用,构建查询字符串并将其作为参数传递.这似乎也不起作用,因为传入的值被编码,使得它不被服务器识别为查询字符串.

例:

[WebGet(UriTemplate = "/url/{query}")]
Run Code Online (Sandbox Code Playgroud)

3)Hackish Solution

到目前为止我找到的唯一方法是将所有参数更改为字符串,并且这里似乎允许使用NULL.

例:

[WebGet(UriTemplate = "/url/{param}?top={top}&first={first}")]
object GetStuff(string param, string top, string first);
Run Code Online (Sandbox Code Playgroud)

此接口的使用仍然接受正确的变量类型,但是ToString被使用.Thes查询字符串参数仍出现在实际请求中.

那么,使用WCF 消费 REST服务有没有办法让查询字符串参数可选?

更新 - 如何修复

提出了创建服务行为的建议.这继承自WebHttpBehaviour.它看起来如下:

public class Api : ClientBase<IApi>
{
    public Api() : base("Binding")
    {
        Endpoint.Behaviors.Add(new NullableWebHttpBehavior());
    }
}
Run Code Online (Sandbox Code Playgroud)

NullableWebHttpBehavior可在下列问题#1中找到:一个WCF服务合同可以有一个为空的输入参数?.唯一的问题是,ConvertValueToString …

.net c# wcf

7
推荐指数
1
解决办法
6340
查看次数

标签 统计

wcf ×2

.net ×1

c# ×1

contract ×1

operation-contract ×1

rest ×1

web-services ×1