【发布时间】:2013-12-13 08:22:14
【问题描述】:
我有一个通过 Ajax 调用的 WebMethod。该代码在 Visual Studio 中完美运行,但是一旦我将其发布到 IIS7 并登录,我就会收到内部服务器错误(HTTP 状态 500)。
使用 Fiddler 我看到以下内容:
无法加载文件或程序集 'System.Web.Extensions, Version=4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一 依赖关系。系统找不到指定的文件。
我想我可能需要 web.config 中的某些内容,但我不确定。
代码如下:
AJAX
function GetProgressStatus() {
$.ajax({
type: "POST",
url: paths + '/webmethods.asmx/Gety',
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: false,
traditional: true,
success: function (msg) {
for (var i = 0; i < 13; i++) {
SetValueToBox(msg.d[i], i + 2);
SetNumberColor(i + 2);
}
}
});
网络方法
[System.Web.Services.WebMethod(BufferResponse = false, EnableSession = true)]
public object Gety()
{
if (HttpContext.Current.Session["LoggedInUserType"].ToString() == GlobalVaribles.UserLogged)
{
var viewUserDashboardCountsValueBussinessLogicLayer = new ViewUserDashboardCountsValueBLL();
var userDashboardValues =
viewUserDashboardCountsValueBussinessLogicLayer.GetUserDashboardCountByUserId(Convert.ToInt64(HttpContext.Current.Session["CompanyID"]));
return userDashboardValues;
}
else
{
var viewConsultantDashboardCountValueBussinessLogicLayer =
new ViewConsultantDashboardCountValueBLL();
var consultantDashboardValues =
viewConsultantDashboardCountValueBussinessLogicLayer.GetConsultantDashboardCountByUserId(Convert.ToInt64(HttpContext.Current.Session["LoggedUserId"]));
return consultantDashboardValues;
}
}
可能的修复:
我删除了可能存在问题的区域。我现在只需浏览我的网站,看看是否一切正常。
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
【问题讨论】: