Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务返回400个错误请求_C#_Asp.net_Ajax_Wcf - Fatal编程技术网

C# WCF服务返回400个错误请求

C# WCF服务返回400个错误请求,c#,asp.net,ajax,wcf,C#,Asp.net,Ajax,Wcf,我有一个在本地工作的应用程序,它可以在部署和使用.mdf SQL Express数据库文件时工作(我通常用于测试目的)。但是,当我将其改为与我们的SQL Server 2008配合使用时,该应用程序可以工作,但服务无法工作 例如,如果在页面的“代码隐藏”中有一个按钮,可将数据添加到如下表中,则效果良好: public static string connString = @"Data Source=server1;Initial Catalog=Project;Integrated Securi

我有一个在本地工作的应用程序,它可以在部署和使用.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();
    }       
}
My web.config已设置为在该服务器上使用模拟,并且一切都运行良好。然而,对于我的服务,查询似乎没有返回任何内容,我得到了一个400错误的请求错误

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;
    }
如果我没有查询数据库,而是让服务返回静态数据,那么它可以正常工作。
当应用程序的其余代码正常工作时,是什么原因导致我的服务无法连接到数据库?

您可能没有按照服务所期望的顺序或顺序设置HTTP头

下面是我调试它的方法:

  • 使用.exe创建快速测试客户端
  • 安装,打开它
  • 使用瘦客户端调用服务操作
  • 使用web应用程序调用相同的服务操作
  • 在Fiddler中查看每个请求的完整HTTP请求。比较一下。找出AJAX调用的不同之处,并解决这些差异,使其与生成的客户端使用的内容相匹配

  • 这可能是因为您正在发帖子,但服务部门希望得到一个GET

    尝试指定该方法应为POST:

    [WebInvoke(Method = "POST", UriTemplate = "", ResponseFormat = WebMessageFormat.Json)]
    
    另一种可能是您使用的是可信连接。这意味着安全上下文是应用程序池的标识(如果使用默认值)。然后,您将使用一个本地帐户与数据库建立连接,该帐户无法访问另一台计算机上的数据库


    奇怪的是,根据错误消息,它应该是第一个解释,但根据您的描述,它将是第二个解释

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

    调试服务时它是否会抛出任何错误?为什么它会在本地工作以及使用SQL Express.mdf数据库文件时工作?这不起作用。我尝试在连接字符串中指定用户名/密码,但没有更改。不幸的是,我发现这个错误也没有帮助。我的DBA告诉我,它应该在端口1449上可用,但将连接字符串更改为匹配也不起作用。默认端口为1433,因此,如果您的数据库位于其他端口上,则需要指定它,我们通常通过创建sql别名来执行此操作。尝试在代码中记录错误并检查事件日志。sweeeeet!是的,我的DBA在尝试连接时检查了错误日志,我发现:
    用户“域\用户”登录失败。原因:尝试将NT帐户名与SQL Server身份验证一起使用。
    当我更改为SSPI时,它在本地测试时起作用,但使用SQL Server,但在服务器上仍然不起作用。DBA提到错误现在不同了:
    用户'DOMAIN\server1$'登录失败。原因:基于令牌的服务器访问验证失败,出现基础结构错误。检查以前的错误。
    我更改了身份,现在一切都好了!谢谢