可以';t使用基本端点地址为POST和GET执行WCF REST服务

本文关键字:POST GET 执行 服务 REST WCF 地址 端点 可以 | 更新日期: 2023-09-27 17:57:58

我正试图创建一组具有以下端点(以及其他端点)的WCF REST服务:

  • /Session(支持HTTP POST并创建会话对象。在响应中返回sid)
  • /Session/{sid}(支持HTTP GET并返回表示先前创建的会话的JSON对象)

以下是服务合同中的定义:

[OperationContract]
[WebInvoke(Method="POST", RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json, UriTemplate="Session")]
        string InitializeSession(Stream contents);
[OperationContract]
[WebInvoke (Method="GET", RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json, UriTemplate="Session/{sid}")]
        string RetrieveSession(string sid);

如果没有定义GET操作,我可以很好地调用POST,并在响应中获得预期的sid。当包含GET OperationContract时,调用POST抛出:

500 System.ServiceModel.ServiceActivationException

响应中没有额外的数据(非常有用),即使我有

<serviceDebug includeExceptionDetailInFaults="true"/>

在web.config中的服务行为中定义。

OperationContract定义对于我试图实现的目标是否正确(假设我想要实现的目标是正确的RESTful)?如果是这样的话,我可能错过了什么愚蠢的配置选项,可以访问这两个操作?

可以';t使用基本端点地址为POST和GET执行WCF REST服务

Try changing your operation contracts of your get and post methods to some thing like below: 
1. Post
[OperationContract]
[WebInvoke(UriTemplate = "Session", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
2. Get
 [OperationContract]
 [WebInvoke(UriTemplate = "Session/{sid}", Method = "GET", ResponseFormat = 
  WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]