我应该在哪里看:WCF休息 - 找不到POST端点

时间:2015-06-04 23:16:25

标签: c# json wcf rest wcf-endpoint

我已经挖掘了近两天,这表明它将是一个非常简单的解决方案:

我有一个WCF REST服务。 GET非常适合返回JSON,但是在POST中我只接收在Chrome和Fiddler中找不到的Endpoint。

我会提供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);
}

最后,我在同一个文件中有两个相同的类:

public class ClassPost : IClassPost
    {
        public string DecodePost(string queryString)
        {
            string Deserialized = JsonCleaner.CleanAllWhiteSpace(JsonConvert.DeserializeObject(queryString).ToString());
            return Deserialized;
        }

GET上的Decode类是相同的,相同的方法和类。

我怎样才能获得有关失败原因的更多信息,或者我做错了什么? (到目前为止,Stack Overflow上的任何问题都没有,或者似乎有相同的问题/解决方案)。

1 个答案:

答案 0 :(得分:0)

这证明我的服务合同有问题。

将其更改为单独的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);
}