2009-08-11 31 views
15

Voglio solo imparare perché non riesco a staticizzare i metodi web nei servizi web? Perché è limitato?Perché i metodi statici non sono utilizzabili come operazioni di servizi Web nei servizi Web ASMX?

Può qualche corpo darmi una spiegazione concisa di questo.

+0

BTW, sei a conoscenza del fatto che Microsoft ora consideri i servizi Web ASMX come "tecnologia legacy" e che abbiano smesso di correggere i bug? Dovresti usare WCF. –

+0

Non ero a conoscenza di ciò :(. – Tarik

+1

Atarikg, WCF supporta i webservice di base nella sua implementazione e molto altro ancora (è un framework enorme e completo) .E 'piuttosto lucido. Non sono sicuro se i metodi statici sono permessi in un servizio WCF anche se sono in cima alla mia testa. –

risposta

23

La risposta è: perché non è possibile.

Non è progettato in questo modo. Il progetto prevede la creazione di un'istanza della classe del servizio Web, quindi verrà chiamato un metodo di istanza.

Posso solo immaginare perché Microsoft l'ha progettato in questo modo. Per saperlo con certezza, dovresti chiederlo a loro. Considerare:

  1. Non c'è alcun vantaggio particolare nel consentire i metodi statici. Qualunque cosa tu possa fare con un metodo statico, puoi anche fare con un metodo di istanza.
  2. Una classe [WebService] non è destinata a essere una classe arbitraria che viene utilizzata come servizio Web. È pensato per essere una classe che hai creato allo scopo di esporre le operazioni di servizio web. Pertanto, non è necessario supportare classi già esistenti e già dotate di metodi statici.
  3. L'implementazione Header SOAP consente alla classe di contenere un campo di istanza di un tipo derivante dalla classe SoapHeader. Questo campo verrà riempito con un'intestazione SOAP in entrata e/o conterrà l'intestazione SOAP da restituire. Non è possibile farlo con un campo statico, in quanto verrebbe sovrascritto con ciascuna richiesta.

Come ho detto, queste sono tutte ipotesi. La risposta corretta alla domanda è "non puoi perché è così che è stato progettato da Microsoft: se vuoi sapere perché l'hanno progettata in questo modo, devi chiedere loro".


FWIW, ho appena controllato, e non sembra che WCF permette metodi statici per essere operazioni sia.

+0

+1 Buona risposta! :-) –

+3

Ma ti chiedo perché? Non direbbero semplicemente "Beh, ragazzi non progetteremo questa cosa in questo modo, invece, sarà progettata in questo modo. Blah blah". Quello che sto chiedendo è la ragione di questo. – Tarik

+0

Grazie per la risposta pulita ed elaborata. – Tarik

3

Quando un client crea un oggetto per il servizio Web, ciò che realmente sta creando è un oggetto proxy per quel servizio Web. Questo oggetto proxy gestisce cose come l'apertura e la chiusura delle connessioni per te e tutto il sovraccarico di lavorare effettivamente con il servizio web. Una chiamata al metodo statico sarebbe difficile da gestire. Il "proxy statico" per mancanza di una parola migliore dovrebbe fare tutte le cose che l'istanza dell'oggetto proxy sta facendo ogni volta che un client chiama uno dei metodi statici, aggiungendo così un sovraccarico.

+0

Sono abbastanza sicuro che stia parlando del lato server, non del lato client. –

+1

La mia risposta risponde alla sua domanda in un modo che penso aiuta a spiegare perché i metodi statici sul lato server non funzionerebbero. Solo dicendo che i servizi web sono progettati in modo che non possano non dire perché sono stati progettati in quel modo in primo luogo. –

+0

Ma non è questo il motivo. Quello che succede sul server ha poco a che fare con ciò che accade sul client. Non c'è corrispondenza tra il proxy lato client e l'istanza del servizio Web lato server. Il lato server non viene istanziato semplicemente perché il proxy client è. Sulla base di questo ragionamento, dovrò fare un downvote. –