【问题标题】:Where should I look: WCF Rest - POST Endpoint Not Found我应该在哪里看:WCF Rest - POST Endpoint Not Found
【发布时间】:2015-06-04 23:16:24
【问题描述】:

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

我有一个 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 上解码的类是相同的,相同的方法和类。

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

【问题讨论】:

    标签: c# json wcf rest wcf-endpoint


    【解决方案1】:

    原来是我的服务合同有问题。

    将其更改为单独的 ServiceContract。

    将所有 OperationContract 移动到一个服务合同中更正了问题,因此看起来像这样:

    [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);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多