OVH Cloud OVH Cloud

appel asynchrone

4 réponses
Avatar
Oscar
bonjour,

je suis face a un problème auquel je ne trouve pas de solution (par manque
de compétence j'imagine)

Le voici :
J'ai besoin depuis le page load d'une page ASP.NET d'appeller une procécure
d'une classse de manière asynchrone ceci afin de libérer de suite la page asp
sans attendre la fin de l'exécution de cette procédure :
Voici le contexte :
Cette procédure peut en effet être longue à l'exécution car elle génère un
export au format excel qu'elle stocke sur le serveur et envoi un email à
l'utilisateur lui fournissant un lien vers ce fichier.

Auriez vous un exemple en VB de préférence pour résoudre ce type de
problématique ?

Merci aux ames charitables *gros mal de tête*

4 réponses

Avatar
Nicolas Moreau [MS]
Bonjour,

La réponse proposée par .NET est simple : Asynchronous programming :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrasynchronousprogrammingoverview.asp

La mauvaise technique serait de démarrer un second thread, ... La stabilité
du traitement serveur serait compromise.
La solution proposée propose un modele de programmation (pas évident au
premier abord) mais qui finalement est simple et surtout systématique.

Nicolas
Microsoft Services France.

"Oscar" a écrit dans le message de news:

bonjour,

je suis face a un problème auquel je ne trouve pas de solution (par manque
de compétence j'imagine)

Le voici :
J'ai besoin depuis le page load d'une page ASP.NET d'appeller une
procécure
d'une classse de manière asynchrone ceci afin de libérer de suite la page
asp
sans attendre la fin de l'exécution de cette procédure :
Voici le contexte :
Cette procédure peut en effet être longue à l'exécution car elle génère un
export au format excel qu'elle stocke sur le serveur et envoi un email à
l'utilisateur lui fournissant un lien vers ce fichier.

Auriez vous un exemple en VB de préférence pour résoudre ce type de
problématique ?

Merci aux ames charitables *gros mal de tête*






Avatar
oscar
merci pour cette réponse je vais l'étudier.

En effet la création d'un second thread j'avais essayé mais bon a priori il
est tué lors de la fin du chargement de la page.

"Nicolas Moreau [MS]" wrote:

Bonjour,

La réponse proposée par .NET est simple : Asynchronous programming :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrasynchronousprogrammingoverview.asp

La mauvaise technique serait de démarrer un second thread, ... La stabilité
du traitement serveur serait compromise.
La solution proposée propose un modele de programmation (pas évident au
premier abord) mais qui finalement est simple et surtout systématique.

Nicolas
Microsoft Services France.

"Oscar" a écrit dans le message de news:

> bonjour,
>
> je suis face a un problème auquel je ne trouve pas de solution (par manque
> de compétence j'imagine)
>
> Le voici :
> J'ai besoin depuis le page load d'une page ASP.NET d'appeller une
> procécure
> d'une classse de manière asynchrone ceci afin de libérer de suite la page
> asp
> sans attendre la fin de l'exécution de cette procédure :
> Voici le contexte :
> Cette procédure peut en effet être longue à l'exécution car elle génère un
> export au format excel qu'elle stocke sur le serveur et envoi un email à
> l'utilisateur lui fournissant un lien vers ce fichier.
>
> Auriez vous un exemple en VB de préférence pour résoudre ce type de
> problématique ?
>
> Merci aux ames charitables *gros mal de tête*
>
>
>
>





Avatar
oscar
bonjour,

j'ai tenté de mettre en application la solution expliquée dans l'article que
vous m'avez conseillé et je rencontre un problème :

dans la proc appelé je me contente simplement de mettre une valeur texte
dans un donnée membre aucun probleme
par contre si je tente d'accédér au HttpContext ca plante :

Voici le code :

1 - la proc d'appel
'----------------------------------------------------------------------------------------
' DelegateExportGlobalPersons
' Paramètre :
' - la donnée membre : _COMPANY_I
'----------------------------------------------------------------------------------------
public sub DelegateExportGlobalPersons()
try
Dim MyPerson as new Person()

Dim threadId As Integer
' Create the delegate.
Dim dlgt As New AsyncDelegate(AddressOf MyPerson.ExportGlobalPersons)
' Initiate the asynchronous call.
Dim ar As IAsyncResult = dlgt.BeginInvoke(threadId, nothing, nothing)

While Ar.isCompleted = false
'thread.sleep(10)
end While

dlgt.EndInvoke(threadId, ar)

MyPerson = nothing

Catch objError As Exception
_ObjErrorMessage = "<b>* Error in UFI CLASS Person - Function
SearchPerson() <br />" & objError.Message & "<br />" & objError.Source
Exit sub
End Try
end sub

- 2 - la procedure appellée

'----------------------------------------------------------------------------------------
' ExportGlobalPersons
' Paramètre :
' - la donnée membre : _COMPANY_I
'----------------------------------------------------------------------------------------
public sub ExportGlobalPersons(<Out> ByRef threadId As Integer)
try

'Dim FILE_NAME as string =
System.Web.HttpContext.current.Server.MapPath("/_EXPORTS/restriction.txt")
'_ObjErrorMessage = "FILE_NAME = " & FILE_NAME

_ObjErrorMessage ="test tout bete"


Catch objError As Exception
_ObjErrorMessage = "<b>* Error in UFI CLASS Person - sub
ExportGlobalPersons() <br />" & objError.Message & "<br />" & objError.Source
End Try
end sub






"Nicolas Moreau [MS]" wrote:

Bonjour,

La réponse proposée par .NET est simple : Asynchronous programming :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrasynchronousprogrammingoverview.asp

La mauvaise technique serait de démarrer un second thread, ... La stabilité
du traitement serveur serait compromise.
La solution proposée propose un modele de programmation (pas évident au
premier abord) mais qui finalement est simple et surtout systématique.

Nicolas
Microsoft Services France.

"Oscar" a écrit dans le message de news:

> bonjour,
>
> je suis face a un problème auquel je ne trouve pas de solution (par manque
> de compétence j'imagine)
>
> Le voici :
> J'ai besoin depuis le page load d'une page ASP.NET d'appeller une
> procécure
> d'une classse de manière asynchrone ceci afin de libérer de suite la page
> asp
> sans attendre la fin de l'exécution de cette procédure :
> Voici le contexte :
> Cette procédure peut en effet être longue à l'exécution car elle génère un
> export au format excel qu'elle stocke sur le serveur et envoi un email à
> l'utilisateur lui fournissant un lien vers ce fichier.
>
> Auriez vous un exemple en VB de préférence pour résoudre ce type de
> problématique ?
>
> Merci aux ames charitables *gros mal de tête*
>
>
>
>





Avatar
Simon Mourier
Il est probable que le contexte Http n'existe pas dans la partie traitement
asynchrone, car lié au thread courant.

D'un point de vue architecture, il serait de toutes façons plus propre de
faire vos traitements dans un service Windows externe installé sur la
machine, et d'appeler ce service à partir de la page ASP.Net en lui passant
les informations qui vont bien par un moyen quelconque (.NET remoting, web
service, MSMQ, etc...).

Simon.
www.softfluent.com


"oscar" a écrit dans le message de news:

bonjour,

j'ai tenté de mettre en application la solution expliquée dans l'article
que
vous m'avez conseillé et je rencontre un problème :

dans la proc appelé je me contente simplement de mettre une valeur texte
dans un donnée membre aucun probleme
par contre si je tente d'accédér au HttpContext ca plante :

Voici le code :

1 - la proc d'appel
'----------------------------------------------------------------------------------------
' DelegateExportGlobalPersons
' Paramètre :
' - la donnée membre : _COMPANY_Id
'----------------------------------------------------------------------------------------
public sub DelegateExportGlobalPersons()
try
Dim MyPerson as new Person()

Dim threadId As Integer
' Create the delegate.
Dim dlgt As New AsyncDelegate(AddressOf MyPerson.ExportGlobalPersons)
' Initiate the asynchronous call.
Dim ar As IAsyncResult = dlgt.BeginInvoke(threadId, nothing, nothing)

While Ar.isCompleted = false
'thread.sleep(10)
end While

dlgt.EndInvoke(threadId, ar)

MyPerson = nothing

Catch objError As Exception
_ObjErrorMessage = "<b>* Error in UFI CLASS Person - Function
SearchPerson() <br />" & objError.Message & "<br />" & objError.Source
Exit sub
End Try
end sub

- 2 - la procedure appellée

'----------------------------------------------------------------------------------------
' ExportGlobalPersons
' Paramètre :
' - la donnée membre : _COMPANY_Id
'----------------------------------------------------------------------------------------
public sub ExportGlobalPersons(<Out> ByRef threadId As Integer)
try

'Dim FILE_NAME as string > System.Web.HttpContext.current.Server.MapPath("/_EXPORTS/restriction.txt")
'_ObjErrorMessage = "FILE_NAME = " & FILE_NAME

_ObjErrorMessage ="test tout bete"


Catch objError As Exception
_ObjErrorMessage = "<b>* Error in UFI CLASS Person - sub
ExportGlobalPersons() <br />" & objError.Message & "<br />" &
objError.Source
End Try
end sub






"Nicolas Moreau [MS]" wrote:

Bonjour,

La réponse proposée par .NET est simple : Asynchronous programming :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrasynchronousprogrammingoverview.asp

La mauvaise technique serait de démarrer un second thread, ... La
stabilité
du traitement serveur serait compromise.
La solution proposée propose un modele de programmation (pas évident au
premier abord) mais qui finalement est simple et surtout systématique.

Nicolas
Microsoft Services France.

"Oscar" a écrit dans le message de
news:

> bonjour,
>
> je suis face a un problème auquel je ne trouve pas de solution (par
> manque
> de compétence j'imagine)
>
> Le voici :
> J'ai besoin depuis le page load d'une page ASP.NET d'appeller une
> procécure
> d'une classse de manière asynchrone ceci afin de libérer de suite la
> page
> asp
> sans attendre la fin de l'exécution de cette procédure :
> Voici le contexte :
> Cette procédure peut en effet être longue à l'exécution car elle génère
> un
> export au format excel qu'elle stocke sur le serveur et envoi un email
> à
> l'utilisateur lui fournissant un lien vers ce fichier.
>
> Auriez vous un exemple en VB de préférence pour résoudre ce type de
> problématique ?
>
> Merci aux ames charitables *gros mal de tête*
>
>
>
>