在WCF Rest Service中找不到端点的自定义消息

时间:2012-05-15 11:21:29

标签: c# wcf rest endpoints wcf-endpoint

我正在使用WCF创建ReSTful服务。说我的OperationContract是这样的:

[OperationContract]
[WebGet(
 ResponseFormat = WebMessageFormat.Json,
 BodyStyle = WebMessageBodyStyle.Wrapped,
 UriTemplate = "GetItemList/{token}/{value}"
)]
Stream GetItemList(string token);

因此,当我致电http://example.com/Service1.svc/GetItemList/myToken/myValue时,将调用该服务。

现在我想编写一个默认方法,说明一些链接,“没有方法/终点存在”,用户调用      http://example.com/Service1.svc/GetItemList/myToken/或      http://example.com/Service1.svc/GetItemList/myValue/或      http://example.com/Service1.svc/GetItemList/

如何在我的代码中实现它?

现在我正在做的是:

 [OperationContract]
 [WebGet(
   ResponseFormat = WebMessageFormat.Json,
   BodyStyle = WebMessageBodyStyle.Wrapped,
   UriTemplate = "GetItemList/"
 )]
 string ValidateItemList();

 [OperationContract]
 [WebGet(
   ResponseFormat = WebMessageFormat.Json,
   BodyStyle = WebMessageBodyStyle.Wrapped,
   UriTemplate = "GetItemList/{Val1}"
 )]
 string ValidateItemList(string Val1);

在函数中,我只返回一个字符串,上面写着“No methods Exists”。

有更好的方法吗?对于定向到我的服务的网址,我可以自定义错误消息吗?比如说,所有非现有网址请求的常见消息都是针对我的服务的?

2 个答案:

答案 0 :(得分:0)

基本上,WCF的体系结构试图将任何协议的低级组件(在本例中为http)抽象出来,因此您不必担心这些类型的细节。不幸的是,y,该引擎没有公开处理引擎无法正确路由的请求的好方法。

在这种情况下,URI不能“分派”到正确的合同实现类。引擎有这些奇妙的组件,等待它,Dispatchers,可以在wcf框架内通过配置或编程自定义。问题是他们实施起来非常痛苦。我在下面列出的另一个问题的答案中实现了意外的消息调度程序:

Handling Invalid URI passed to a WCF service

如果您需要任何进一步的信息,请告诉我们!

答案 1 :(得分:0)

我没有为上述问题找到任何可行的解决方案。但我找到了另一种选择。借助VS 2012,Microsoft发布了ASP.NET Web API。他们说,这是WCF Rest的下一个版本。所以在这里,你可以很容易地处理这些情况。我们可以在其中使用路由方法。

任何对该解决方案感兴趣的人都可以查看这篇文章,以便提前开始:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api