0

我有一个 jQuery UI 自动完成小部件,它通过调用 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()]and[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 在部署时无法工作吗?

4

2 回答 2

1

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

我想给您的另一个建议是,List<Employee>您必须返回以下内容,而不是返回:

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

    public string ErrorMessage {get; set;}
}

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

于 2012-08-28T06:08:36.323 回答
1

正如我之前提到的,它可能是一个 SQL 异常,既然你发现了它,这里有一些要检查的内容:

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

这是一个简短的提示:

你需要检查的7件事

但是最好看看消息末尾的代码是什么。

于 2012-08-28T06:49:41.147 回答