2012-04-26 55 views
1

我有一个非常简单的WCF服务设置了类似的方法:WCF服务与UriTemplate - “长度不能小于零”

[OperationContract] 
[WebGet(UriTemplate = "/GetById/{id}")] 
ResponseSingle<BinderViewModel> GetById(string id); 

当我试着和一个GUID打出这样.. 。

HTTP://localhost/services/myservicename.svc/GetById/5c3f04d7-f96e-4acd-847b-6da5937e

它返回一个500和异常声明:

长度不能小于零。参数名:长度

如果我删除UriTemplate,而是打它为:

HTTP://localhost/services/myservicename.svc/GetById ID = 5c3f04d7-f96e-4acd-847b- 6da5937e

它工作正常。

我已经做了一些阅读,它看起来像这个请求会在它增长>一定的长度时崩溃。

想知道是否有其他人被此前咬过,如果有的话有解决它的任何运气?

干杯, 添

+0

查询您确定在端点配置中为您的服务设置了正确的路径吗? – paramosh 2012-04-26 10:46:37

+1

你可以发布你的配置部分上述服务?我确实尝试了同样的方式,并且没有任何问题,它按预期工作。此外,500错误也可能是由于其他原因导致的内部服务器错误。只需启用跟踪即可查看其失败的原因 – Rajesh 2012-04-26 11:08:47

+0

我建议您查看WCF WebAPI(ASP.NET Web API)http://wcf.codeplex.com/它试图设置简单时会消除很多头痛服务。 – 2012-04-26 15:25:58

回答

0
[WebGet(UriTemplate = "/GetById/{id}")] 

应该是:

[WebGet(UriTemplate = "/GetById?id={id}"] 

添加更多的信息(如我感到困惑用于第二),/Action/{variable}是服务的路径。即,/ GetBy/ID或/ GetBy /名称

然而,该方法的期望的值,以完成服务的处理,从而将必须在语法?CaseSenstiveMethodParameterName={queryParameter}

MSDN URL Template Help