2010-06-29 3 views
9

J'ai du code que je voudrais exécuter très tôt dans le cycle de vie d'un appel à une fonction ASMX. Pour nos pages ASPX, ce code est dans la fonction Page_Init() sur une classe de base à partir de laquelle toutes nos pages ASPX héritent.équivalent ASMP de Page_Init?

Existe-t-il un équivalent ASMX à la fonction Page_Init() de l'ASPX?

Mieux encore, y a-t-il un diagramme de cycle de vie ASMX comme celui de l'ASPX? http://msdn.microsoft.com/en-us/library/ms178472.aspx

S'il existe un équivalent ASMX à Page_Init(), je suppose que je peux implémenter du code dans une classe de base commune, à partir de laquelle toutes mes classes ASMX peuvent hériter, corriger?

EDIT: Excellentes réponses - merci pour votre aide!

Répondre

8

Il n'y a pas vraiment une telle chose dans un service Web asmx, System.Web.Services.WebService n'a aucun événement. Votre meilleur pari est de créer un constructeur par défaut et de le mettre là.

par exemple.

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class WebService1 : System.Web.Services.WebService 
    { 
     private string strRetVal; 

     public WebService1() 
     { 
      strRetVal = "Hello World"; 
     } 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return strRetVal; 
     } 
    } 
+1

+1 - bon point. J'ai oublié que les appels de service Web sont "sans état", donc le constructeur sera appelé pour chaque requête de méthode web. Joli. – RPM1984

4

Très bonne question! Pas tout à fait sûr, mais je crois que l'exécution des services Web ASMX est légèrement différente des pages ASPX - il n'y a pas de "Cycle de vie de page" (ie il n'y a pas d'initialisation des contrôles pour rendre HTML - comme la réponse est généralement XML). Vos seules options seraient de vous connecter à l'un des événements Application de Global.asax - le seul événement approprié serait Application_PreRequestHandlerExecute.

Vous pouvez essayer Application_BeginRequest, mais je crois que c'est uniquement pour les demandes de pages ASP.NET, pas les appels de service Web.

Vous êtes une autre option (comme vous l'avez dit) consiste à créer une classe de base pour vos services Web, puis appelez la méthode de base commune dans toutes vos méthodes Web à la toute première ligne. Vous devrez répéter cet appel dans TOUTES vos méthodes Web. Ou si vous avez toutes vos méthodes Web dans un seul fichier de service Web (ASMX), créez simplement une méthode statique régulière (ne la décorez pas avec l'attribut WebMethod) et appelez cela.

+0

Beter route que la acceptée anser imho. (surtout si vous devez faire quelque chose avec le contexte de la demande.) –

0

Ils n'ont pas similaires

'cycle de vie de la seule « événements » 2 sont la demande et la réponse.