WebMethod の呼び出しを介してオブジェクトのリストが取り込まれる jQuery UI Autocomplete ウィジェットがあります。
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.
私のページには、EnablePageMethods="true" の ScriptManager があります。
私のメソッドは公開されており、属性[ScriptMethod()]
と[WebMethod]
属性があります。
WebMethod で呼び出されるデータベースのアクセス許可を確認しました (まだ DB 呼び出しに到達していないため、問題点のようなものです)。
私が持っていることを確認し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 が機能しない理由を教えてくれる人はいますか?