我正在Win2003Srv上的IIS6下对WebMethod进行AJAX调用,这样就可以正常工作了:
<System.Web.Services.WebMethod()> _
Public Shared Sub EmailManagers()
'code
End Sub
使用这样的AJAX调用:
function EmailManagers_Click() {
alert('staring email send');
$.ajax({
type: "POST",
//url: "EACApprovalOverview.aspx/EmailManagers(" + document.URL + ")",
url: "EACApprovalOverview.aspx/EmailManagers",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert("Emails Sent!");
},
fail: function (msg) {
alert("Email Send Failed!");
}
});
alert('end email send');
return false;
};
当我在Win2008Srv上的IIS7.5下运行此应用程序时,我得到“对象引用未设置为对象的实例”。这是堆栈跟踪:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +162
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
我在帖子中看到的其他错误在堆栈跟踪的顶部包含一个额外的行,如下所示:
at System.Web.Script.Services.WebServiceData.GetMethodData(String methodName)
at System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
由于我没有进入WebServiceData.GetMethodData调用,我猜测没有正确加载System.Web.Handlers,导致ScriptModule为null。
我在web.config中有这个:
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
我确保安装了.net 3.5 sp1。我甚至检查了GAC,dll就在那里。我在俯瞰什么?
答案 0 :(得分:1)
在新的aspx中实现新的页面方法之后,在NullReferenceException中 OnPostAcquireRequestState也发生在这里。它只发生在实时服务器上,但不发生在开发服务器上。
问题是通过仅复制预编译的Web部署项目中的bin目录来更新实时服务器。因为该站点是预编译的并且是通配符处理程序,所以aspx在没有aspx物理存在的情况下显示正常。
但是调用页面方法需要存在aspx,因此只需将预编译的占位符aspx复制到实时服务器后页面方法再次起作用。