c# – WCF服务返回400 Bad Request

我有这个应用程序在本地和部署时使用.mdf SQL Express数据库文件(我通常用于测试目的).但是,当我将其更改为与我们的SQL Server 2008一起使用时,应用程序可以正常工作,但服务却没有.

例如,如果在我的代码页面后面我有一个按钮,将数据添加到这样的表,它可以正常工作:

public static string connString = @"Data Source=server1;Initial Catalog=Project;Integrated Security=True";

protected void btnAddProj_Click(object sender, EventArgs e)
{
    using (var sqlc = new SqlConnection(connString))
    {
        sqlc.Open();
        var cmd = sqlc.CreateCommand();
        int intProjectID;

        // Add the project info to the database
        cmd.CommandText = "INSERT INTO tblProject VALUES(@ProjName,@ProjTeam,@ProjStart,@ProjEnd)";
        cmd.Parameters.Add("ProjName", System.Data.SqlDbType.NVarChar).Value = txtProjName.Text;
        cmd.Parameters.Add("ProjTeam", System.Data.SqlDbType.Int).Value = ddlTeamSupported.SelectedValue;
        cmd.Parameters.Add("ProjStart", System.Data.SqlDbType.NVarChar).Value = txtStartDate.Text;
        cmd.Parameters.Add("ProjEnd", System.Data.SqlDbType.NVarChar).Value = txtEndDate.Text;
        cmd.ExecuteNonQuery();
    }       
}

我的web.config设置为在该服务器上使用模拟,所有工作都非常好.但是,对于我的服务,查询似乎没有返回任何内容,我收到400 Bad Request错误.

jquery的代码是:

$.ajax({
    type: "POST",
    async: false,
    url: "Services/ProjectService.svc/test",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        console.log(data);
        }
    });

并为服务:

[ServiceContract]
public interface IProjectService
{
    [OperationContract]
    [WebInvoke(ResponseFormat = WebMessageFormat.Json)]
    ArrayList test();
}


    public static string connString = @"Data Source=server1;Initial Catalog=Project;Integrated Security=True";

    public ArrayList test()
    {
        var sqlc = new SqlConnection(connString);
        sqlc.Open();
        var cmd = sqlc.CreateCommand();
        cmd.CommandText = "SELECT ProjectID FROM tblProject";
        var reader = cmd.ExecuteReader();

        ArrayList temparray = new ArrayList();


        while (reader.Read())
        {
            temparray.Add(reader[0]);
        }
        sqlc.Close();
        return temparray;
    }

如果不是查询数据库而是让服务只返回静态数据,那么它可以正常工作.
当应用程序的其余代码工作时,是什么原因导致我的服务无法连接到数据库?

最佳答案 来自托管WCF服务的数据库连接被视为远程连接,因此请确保您的连接字符串指定了身份验证方法.因此,请尝试在连接字符串中使用Integrated Security = SSPI,如果不起作用,请确保将应用程序池的标识设置为对SQL Server具有权限的域帐户. 🙂

点赞