创建 WCF JSON(非 RESTful)服务
我正在尝试使用 WCF 和 .NET 4 创建一个简单的非 RESTful JSON 服务。 我希望我的服务能够解析具有特定格式的 JSON 请求消息,如下所示:
{ "MethodNameRequest": { "MethodParam1Name": "ParamValue1", "MethodParam2Name": "ParamValue2" } }
此服务的端点应驻留在单个常量 URI(“http://myserver/myservice/”)中,以便所有方法都可以使用 POST 请求来调用。
问题是,每当我尝试使用相同的“UriTemplate”和相同的 HTTP 动词“POST”(使用 WebInvokeAttribute)声明两个(或多个)方法时,如下所示:
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")]
public string Method1()
{
return "Method1";
}
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")]
public string Method2()
{
return "Method2";
}
我收到以下异常:
在合约''中,有多个 使用方法“POST”和a进行操作 相当于 '' 的 UriTemplate。 每个操作都需要一个独特的 UriTemplate 和 Method 的组合 明确地发送消息。 使用 WebGetAttribute 或 WebInvokeAttribute 来改变 UriTemplate 和 Method 值 操作。
关于如何配置 WCF 以允许此操作的任何想法?
I am trying to create a simple non-RESTful JSON service using WCF and .NET 4.
I'd like my service to be able to parse a JSON request message with a specific format, something like this:
{ "MethodNameRequest": { "MethodParam1Name": "ParamValue1", "MethodParam2Name": "ParamValue2" } }
The endpoint for this service should reside in a single constant URI ("http://myserver/myservice/") so that all methods could be invoked using a POST request to it.
The problem is that whenever I try to declare two (or more) methods using the same "UriTemplate" and the same HTTP verb "POST" (using WebInvokeAttribute), like this:
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")]
public string Method1()
{
return "Method1";
}
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")]
public string Method2()
{
return "Method2";
}
I get the following exception:
In contract '', there are multiple
operations with Method 'POST' and a
UriTemplate that is equivalent to ''.
Each operation requires a unique
combination of UriTemplate and Method
to unambiguously dispatch messages.
Use WebGetAttribute or
WebInvokeAttribute to alter the
UriTemplate and Method values of an
operation.
Any ideas on how I can configure WCF to allow this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果 WCF 以某种方式允许不同方法使用相同的 UriTemplate,我不明白 WCF 如何确定要调用哪个方法。似乎您需要在方法内部实现逻辑来处理基于内容的处理。
I don't see how WCF could figure out which method to call if it somehow allowed the identical UriTemplate for the different methods. Seems you need to implement logic inside the method to handle content based processing.
尝试忽略
UriTemplate
属性,而是使用web.config
中的
元素。这将允许wcf
自动为您处理请求。Try to ommit the
UriTemplate
property, use instead the<enableWebScript/>
element inweb.config
. This will allowwcf
to automatically handle the requests for you.