WebMethod在部署时无法正常工作

时间:2012-08-28 05:40:28

标签: asp.net jquery-ui-autocomplete webmethod

我有一个jQuery UI Autocomplete小部件,它通过调用WebMethod填充了一个对象列表。

我正在使用C#,.NET 4.0。

这个'可以在我的机器上运行(在这里插入嘲笑的嗤之以鼻),但是当部署到服务器时,由于WebMethod失败,自动填充不会填充。我可以在IE DevTools的控制台窗口中看到以下错误:

Sys.Net.WebServiceFailedException: The server method 'SearchEmployees' failed with the following error: -- There was an error processing the request.    

以下是Firebug对WebMethod的POST响应中的错误:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.

我的页面上有一个ScriptManager,其中包含EnablePageMethods =“true”

我的方法是公开的,并且具有[ScriptMethod()][WebMethod]属性。

检查了在WebMethod中调用的数据库的权限(由于它甚至还没有进入数据库调用,因此没有实际意义)。

检查我有using System.Web.Services;using System.Web.Script.Services;

检查IIS中给定AppPool的目标框架。

我的javascript / jQuery:

PageMethods.SearchEmployees(function (results) {
    $("#txtMessageFor").autocomplete({
        source: results,
        delay: 0,
        autoFocus: true,
        select: function (event, ui) {
            $('#hfEmployeeEmail').val(ui.item.Email);
        }
    });
});

我在CodeBehind中的WebMethod:

[ScriptMethod()]
[WebMethod]
public static List<Employee> SearchEmployees()
{
    try
    {
        using (SqlConnection conn = new SqlConnection())
        {
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "SELECT Name, Email FROM TableName";
                cmd.Connection = conn;
                conn.Open();
                List<Employee> contacts = new List<Employee>();
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        Employee employee = new Employee();
                        employee.label = sdr["Name"].ToString();
                        employee.value = sdr["Name"].ToString();
                        employee.Name = sdr["Name"].ToString();
                        employee.Email = sdr["Email"].ToString();
                        contacts.Add(employee);
                    }
                }
                conn.Close();
                return contacts;
            }
        }
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

web.config中的连接字符串

<connectionStrings>
    <add name="ConnStr" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FakeDBName.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 
</connectionStrings>

那么,任何人都可以帮助解决部署时WebMethod无法正常工作的原因吗?

2 个答案:

答案 0 :(得分:1)

在Firefox中使用fiddler或Firebug来检查发送到Web服务的请求的状态,这两个工具都可以为您提供更好的主意。我建议首先尝试使用firebug和fidler,你必须进行安装。

我想再给你一个建议,而不是返回List<Employee>,你必须返回类似的内容:

public class ReturnEmployee
{
    public List<Employee> Employees {get; set;}

    public string ErrorMessage {get; set;}
}

这种方法在识别问题方面有很大帮助。

答案 1 :(得分:1)

正如我前面提到的,它可能是一个SQL异常,并且自从你找到它之后,这里有一些要检查的内容:

  

“发生与网络相关或特定于实例的错误   建立与SQL Server的连接。找不到服务器或   无法访问。验证实例名称是否正确   SQL Server配置为允许远程连接。“

这是一个简短的提示:

7 thing you need to check

但是看一下消息末尾的代码会很好。