创建 WCF JSON(非 RESTful)服务

发布于 2024-11-03 09:34:02 字数 1043 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绝影如岚 2024-11-10 09:34:02

如果 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.

注定孤独终老 2024-11-10 09:34:02

尝试忽略 UriTemplate 属性,而是使用 web.config 中的 元素。这将允许 wcf 自动为您处理请求。

Try to ommit the UriTemplate property, use instead the <enableWebScript/> element in web.config. This will allow wcf to automatically handle the requests for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文