我应该在哪里查看:WCF Rest - POST 未找到端点
Where should I look: WCF Rest - POST Endpoint Not Found
我已经研究了将近两天,这表明这将是一个非常简单的修复:
我有 WCF REST 服务。 GET 非常适合返回 JSON,但是在 POST 中我只收到在 Chrome 以及 Fiddler 中找不到的端点。
我将提供 GET 和 POST 属性,以防我通过 GET 方法破坏它。
<services>
<service name="WCFServiceWebRole1.Class" behaviorConfiguration="serviceBehavior">
<endpoint address=""
binding="webHttpBinding"
contract="WCFServiceWebRole1.IClass"
behaviorConfiguration="web">
</endpoint>
</service>
<service name="WCFServiceWebRole1.ClassPost" behaviorConfiguration="serviceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="WCFServiceWebRole1.IClassPost"
behaviorConfiguration="web">
</endpoint>
</service>
</services>
有一件事对我来说很突出,那就是没有为 GET 设置。通过更改它,我打破了 GET 的解决方案,但是通过从 POST 中删除它并没有改变这种情况。
我的服务合同如下所示:
[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
string Decode(string jsonString);
// TODO: Add your service operations here
}
[ServiceContract]
public interface IClassPost
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/POST/?json={jsonString}", Method = "POST")]
string DecodePost(string jsonString);
}
最后,我在同一个文件中有两个相同的 class:
public class ClassPost : IClassPost
{
public string DecodePost(string queryString)
{
string Deserialized = JsonCleaner.CleanAllWhiteSpace(JsonConvert.DeserializeObject(queryString).ToString());
return Deserialized;
}
GET 上解码的 class 与 class.
相同,方法相同
我如何才能获得有关失败原因或我做错了什么的更多信息?
(到目前为止 none 关于 Stack Overflow 或其他问题的问题似乎有相同的问题/解决方案)。
原来是我的服务合同有问题。
将其更改为单独的 ServiceContracts。
将所有 OperationContracts 移动到一个服务合同中解决了这个问题,所以它看起来像这样:
[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
string Decode(string jsonString);
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/POST/?json={jsonString}", Method = "POST")]
string DecodePost(string jsonString);
}
我已经研究了将近两天,这表明这将是一个非常简单的修复:
我有 WCF REST 服务。 GET 非常适合返回 JSON,但是在 POST 中我只收到在 Chrome 以及 Fiddler 中找不到的端点。
我将提供 GET 和 POST 属性,以防我通过 GET 方法破坏它。
<services>
<service name="WCFServiceWebRole1.Class" behaviorConfiguration="serviceBehavior">
<endpoint address=""
binding="webHttpBinding"
contract="WCFServiceWebRole1.IClass"
behaviorConfiguration="web">
</endpoint>
</service>
<service name="WCFServiceWebRole1.ClassPost" behaviorConfiguration="serviceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="WCFServiceWebRole1.IClassPost"
behaviorConfiguration="web">
</endpoint>
</service>
</services>
有一件事对我来说很突出,那就是没有为 GET 设置。通过更改它,我打破了 GET 的解决方案,但是通过从 POST 中删除它并没有改变这种情况。
我的服务合同如下所示:
[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
string Decode(string jsonString);
// TODO: Add your service operations here
}
[ServiceContract]
public interface IClassPost
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/POST/?json={jsonString}", Method = "POST")]
string DecodePost(string jsonString);
}
最后,我在同一个文件中有两个相同的 class:
public class ClassPost : IClassPost
{
public string DecodePost(string queryString)
{
string Deserialized = JsonCleaner.CleanAllWhiteSpace(JsonConvert.DeserializeObject(queryString).ToString());
return Deserialized;
}
GET 上解码的 class 与 class.
相同,方法相同我如何才能获得有关失败原因或我做错了什么的更多信息? (到目前为止 none 关于 Stack Overflow 或其他问题的问题似乎有相同的问题/解决方案)。
原来是我的服务合同有问题。
将其更改为单独的 ServiceContracts。
将所有 OperationContracts 移动到一个服务合同中解决了这个问题,所以它看起来像这样:
[ServiceContract]
public interface IClass
{
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/GET/?json={jsonString}", Method = "GET")]
string Decode(string jsonString);
[WebInvoke(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/POST/?json={jsonString}", Method = "POST")]
string DecodePost(string jsonString);
}