从jQuery调用ASP.NET 4.0 WCF服务会产生400 Bad Request

我知道这个问题似乎已多次发布,但我已经阅读了几乎所有这些问题(互联网上的大部分教程),我仍然无法理解我做错了什么.

我试图在一个网站上实现我们正在开发一个由jQuery脚本使用的WCF Web服务,但在执行AJAX请求时我一直收到400 Bad Request,我开始失去希望.

请注意,我是WCF的新手,我只是通过在线教程形成自己,所以我完全有可能忽略或主要搞砸了.

我尝试但没有帮助的问题:

> WCF Service returns 400 Bad Request
> uploading large xml to WCF REST service -> 400 Bad request
> 400 Bad Request HTTP Response using a WCF POST via JQuery
> Error 400 (Bad Request) with WCF Tutorial?
> Why does my C# client, POSTing to my WCF REST service, return (400) Bad Request?

我阅读的外部资源无济于事:

> http://www.west-wind.com/weblog/posts/324917.aspx
> http://www.c-sharpcorner.com/UploadFile/sridhar_subra/116/
> http://learningbyfailing.com/2008/05/calling-wcf-from-jquery-using-parameters/
> http://iainjmitchell.com/blog/?p=97
>许多其他……

我还尝试创建一个新的解决方案,只有一个页面和服务,以排除干扰,但我仍然有同样的问题.在这里你可以找到代码:

IService.cs

namespace WebService
{
    using System;
    using System.ServiceModel;
    using System.ServiceModel.Web;

    [ServiceContract(Name = "Service", Namespace = "WebService")]
    public interface IService
    {
        [OperationContract]
        [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        String Test();
    }
}

Service.svc.cs

namespace WebService
{
    using System;

    public class Service : IService
    {
        public String Test()
        {
            return "Hello, world.";
        }
    }
}

Default.aspx的

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebService.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#doAjax").click(function (event) {
                    event.preventDefault();
                    jQuery.ajax({
                        contentType: "application/json"
                        , dataType: "text"
                        , error: function (jqXHR, textStatus, errorThrown) {
                            console.group("AJAX error:");
                            console.debug(jqXHR);
                            console.debug(textStatus);
                            console.groupEnd();
                        }
                        , processData: false
                        , success: function (data, textStatus, jqXHR) {
                            console.group("AJAX success:");
                            console.debug(data);
                            console.debug(textStatus);
                            console.debug(jqXHR);
                            console.groupEnd();
                        }
                        , type: "post"
                        , url: "/Service.svc/Test"
                    });
                });
            });
        </script>
        <title>WebService</title>
    </head>
    <body>
        <form runat="server">
            <h1><%= this.Page.Title %></h1>
            <p><input id="doAjax" type="button" value="Run" /></p>
        </form>
    </body>
</html>

Web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
        <bindings />
        <client />
        <behaviors>
            <endpointBehaviors>
                <behavior name="Behavior">
                    <webHttp />
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <services>
            <service name="Service">
                <endpoint behaviorConfiguration="Behavior" binding="webHttpBinding" contract="WebService.IService" />
            </service>
        </services>
    </system.serviceModel>
</configuration>
最佳答案
服务名称必须是完全限定的.尝试:< service name =“WebService.Service”>

转载注明原文:从jQuery调用ASP.NET 4.0 WCF服务会产生400 Bad Request - 代码日志