【问题标题】:WCF 400 Bad RequestWCF 400 错误请求
【发布时间】:2015-12-20 17:23:32
【问题描述】:

我创建了一个简单的函数

       [OperationContract]
       [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)]
       string Start();

定义,

       public String Start()
       {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize("Check");
       }

从使用 Javascript/Jquery 的浏览器, http://localhost/service1.svc 告诉我我已经创建了一项服务和所有其他信息。看起来不错。
我正在尝试使用 http://localhost/service1.svc/Start

我收到一个 400 错误请求。我希望我在这里没有做错什么。我应该能够从浏览器访问 WCF 服务吗? 在我想发帖之前,我尝试了很多。但我无法让这个基本的东西正常工作,这让我很沮丧。

编辑和更新 现在我正处于这个阶段。服务页面告诉我元数据服务已禁用,并要求我插入以下文本

   <serviceMetadata httpGetEnabled="true" />

我插入了文本 - 但它仍然显示相同的文本!!这现在变得太混乱了..

【问题讨论】:

  • 您有任何带有该状态码的有效负载吗?如果否,请尝试打开将错误消息发送回客户端的选项。它是ServiceBehaviors/Behavior元素下的
  • 设置为真。但我没有得到任何有效载荷。只是状态码。
  • @a.dimo 是对的,您指定您的方法只能使用 POST 方法调用。当你用浏览器请求它时,它会发送 GET 请求。
  • 我没有直接从浏览器调用。我使用了一个 Jquery 调用
  • 你能把服务器错误信息贴在这里吗?

标签: wcf json browser bad-request http-status-code-400


【解决方案1】:

尝试使用 GET 更改 POST 并重新启动请求

【讨论】:

  • 不。那没有帮助。我已经尝试过所有组合 - start、start(int id)、GET 和 POST
【解决方案2】:

为我工作。我创建了 WCF 休息服务。

我使用的 URL 看起来像 http://localhost:8080/Service1/Start

代码如下:

using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Web.Script.Serialization;

namespace WcfRestService1
{
    // Start the service and browse to http://<machine_name>:<port>/Service1/help to view the service's generated help page
    // NOTE: By default, a new instance of the service is created for each call; change the InstanceContextMode to Single if you want
    // a single instance of the service to process all calls.   
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    // NOTE: If the service is renamed, remember to update the global.asax.cs file
    public class Service1
    {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
        public string Start()
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize("Check");
        }
    }
}

【讨论】:

  • 嗯.. 我无法确定我的代码出了什么问题。
  • 你创建了什么样的项目?只是 WCF 服务应用程序(在 VS 中的 WCF 选项卡下)或 WCF REST 服务应用程序(在 Web 选项卡下)。
  • 来自 WCF -> WCF 服务应用程序> 我做了更多调查,这就是我发现的.. 无法导入 wsdl:portType 详细信息
  • 类似于本题灰色区域的文字stackoverflow.com/questions/4727091/…
  • 我不知道该怎么办!
猜你喜欢
  • 2018-05-09
  • 2012-04-27
  • 2015-10-15
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2014-01-11
  • 1970-01-01
相关资源
最近更新 更多