可以';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)?如果是这样的话,我可能错过了什么愚蠢的配置选项,可以访问这两个操作?
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)]