我们从客户端调用Asp.Net ajax Web服务。所以JavaScript函数有如下调用:
//更改服务器端状态对象并为案例树设置所选节点的功能。
function JSMethod(caseId, url)
{
Sample.XYZ.Method(param1, param2, OnMethodReturn);
}
function OnMethodReturn(result)
{
var sessionExpiry = CheckForSessionExpiry(result);
var error = CheckForErrors(result);
... process result
}
在“.asmx.cs”文件的服务器端: namespace Sample
[ScriptService]
class XYZ : WebService
{
[WebMethod(EnableSession = true)]
public string Method(string param1, string param2)
{
if (SessionExpired())
{
return sessionExpiredMessage;
}
.
.
.
}
}
网站设置为使用基于表单的身份验证。现在,如果会话已过期,然后调用JavaScript函数“JSMethod”, 然后获得以下错误: Microsoft JScript运行时错误:Sys.Net.WebServiceFailedException:服务器方法“方法”失败,并显示以下错误:System.InvalidOperationException--身份验证失败。
此异常由文件“ScriptResource.axd”中的方法“function Sys $ Net $ WebServiceProxy $ invoke”引发:
function Sys$Net$WebServiceProxy$invoke
{
.
.
.
{
// In debug mode, if no error was registered, display some trace information
var error;
if (result && errorObj) {
// If we got a result, we're likely dealing with an error in the method itself
error = result.get_exceptionType() + "-- " + result.get_message();
}
else {
// Otherwise, it's probably a 'top-level' error, in which case we dump the
// whole response in the trace
error = response.get_responseData();
}
// DevDiv 89485: throw, not alert()
throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));
}
所以问题是即使在调用“Method”之前引发异常,在创建Web代理期间也会发生异常。有关如何解决此问题的任何想法
答案 0 :(得分:0)
您有一个在WebMethod调用中指定的回调方法(OnMethodReturn),但不是错误处理程序方法。您需要创建一个并将其传递给回调方法。然后,您可以在那里处理失败的WebMethod调用。
答案 1 :(得分:0)
即使在Ajax框架可以调用目标方法之前,也会出现此问题,但在创建Web代理时它会失败。无论如何,我通过启用匿名访问Web Service文件夹并在Web服务方法中显式检查Session来解决问题
答案 2 :(得分:0)
为什么不在JS方法调用周围使用try { } catch { }
?
答案 3 :(得分:-1)
尝试这个...使用“静态”
[WebMethod(EnableSession = true)]
public static string Method(string param1, string param2)