/ / Javascript assíncrono estranho e comportamento do WebMethod - javascript, asp.net, assíncrono, webmethod, pagemethods

Estranho assíncrono Javascript & WebMethod Comportamento - javascript, asp.net, assíncrono, webmethod, pagemethods

Estou chamando um PageMethod em javascript. Assim:

function DeleteBatchJS2()
{$find("mdlPassword").hide();
var pswd = $("#txtPassword").val();
var userInfo = get_cookie("UserInfo");
PageMethods.AuthenticateAndDelete(
userInfo,
pswd,
onSuccess(),
onError1());
}

function onSuccess(result)
{alert(result);}

function onError1(result)
{alert(result);}

Agora aqui está a parte estranha: Alguém poderia pensar que chamar PageMethods daria um (1) alerta ao executar. A função onSuccess ou a função onError1. MAS - Recebo dois alertas, ambos dizendo "Indefinido".

De fato, quando eu coloco um ponto de interrupção noo VB code-behind (como a terceira ou a quarta linha de código da função), recebo ambas as caixas de alerta antes de poder entrar no meu código por trás. Dois alertas e ENTÃO meu código quebra.

Isso não faz sentido para mim. Estou faltando alguma coisa?

Obrigado,

Jason.

P.S. - Aqui está a fonte da função WebMethod. Observe também que ela faz uma chamada WCF.

<WebMethod()> _
Public Shared Function AuthenticateAndDelete(ByVal UserInfo As String, ByVal Password As String) As Boolean
Dim Client As New LetterWriterClient
Dim bo As New BatchOperations
Dim UserNumber As String
Dim UserName As String


"Extract the user name and number from the user info cookie string
UserName = GetValueFromVBCookie("UserName", UserInfo)
UserNumber = GetValueFromVBCookie("UserNumber", UserInfo)

"Now validate the user
If bo.ValidateActiveDirectoryLogin("Backoffice", UserName, Password) Then
AuthenticateAndDelete = Client.Delete_dat_BatchSQL(UserNumber)
Client.Close()
Else
AuthenticateAndDelete = False
End If

End Function

Respostas:

0 para resposta № 1

Deveria estar:

PageMethods.AuthenticateAndDelete(
userInfo,
pswd,
onSuccess,
onError1);
}

1 para resposta № 2

Em vez de passar o valor de retorno das funções do manipulador, ou seja, onSuccess () e onError1 (), passe as próprias funções, ou seja, onSuccess e onError1.


0 para resposta № 3

Há uma tag stateNetworkTimeout envolvida com o sessionState. Assim:

<sessionState timeout="540" stateNetworkTimeout="5"></sessionState>

Eu não tinha um stateNetworkTimeout, com certeza era bombardeado todas as vezes.

Obrigado Mrchief!