Condividi tramite


Modifiche al codice dopo aver reso conformi gli endpoint servizio Web ai file WSDL

Aggiornamento: novembre 2007

Dopo avere reso conforme un endpoint di un servizio Web implementato al linguaggio di descrizione dei servizi Web (WSDL), nei seguenti file di codice associati all'endpoint, potrebbero riscontrarsi delle modifiche:

  • Il file che implementa la classe del servizio Web.

    Questa classe contiene le firme dell'operazione e il codice del corpo di tutti i metodi. Un'operazione è un metodo della classe con l'attributo WebMethod e altri attributi correlati.

    Nota:

    Quando si rende conforme un endpoint implementato, nessuna modifica avviene al codice del corpo del metodo. Comunque, le modifiche descritte in questo argomento potrebbero fare sì che il codice del corpo del metodo non venga più compilato. Di conseguenza, esaminare il codice e identificare le modifiche che potrebbero essere richieste per correggere qualsiasi errore del compilatore.

  • Uno o più file della classe che contengono definizioni di tipo personalizzato.

Le modifiche potrebbero includere:

  • Adding new operation signatures

  • Updating operation signatures

  • Removing WebMethod attributes from operation signatures

  • Updating operation attributes

  • Adding or renaming custom type definitions

  • Conforming only the first matching operations

  • Adding comments about changes to code files

La finestra Dettagli servizio Web rispecchierà anche le modifiche adatte. Nelle sezioni elencate di seguito sono disponibili ulteriori informazioni su queste modifiche:

Aggiunta di nuove firme dell'operazione

Se il file WSDL descrive una nuova operazione, Visual Studio ne aggiunge la rispettiva firma e gli attributi alla classe del servizio Web. È possibile identificare la firma della nuova operazione cercando il metodo WebMethod. 

Nota:

I metodi di classe senza l'attributo WebMethod non sono operazioni ma metodi non Web. Tali metodi non vengono inclusi nel confronto delle operazioni. Per ulteriori informazioni, vedere Updating Operation Signatures.

Il parametro MessageName della nuova operazione corrisponderà al nome dell'operazione nel file WSDL. Il parametro MessageName si trova nell'attributo WebMethod della firma dell'operazione.

Nota:

La nuova operazione potrebbe avere lo stesso nome di un membro della classe esistente (ad esclusione di metodi non Web). In questo caso, Visual Studio aggiungerà un numero ordinale al nome del metodo della nuova operazione, rendendolo univoco.

Ad esempio, supponiamo che la classe del servizio Web contenga un membro denominato "newCatalog." Se il file WSDL descrive un'operazione denominata "newCatalog", il nome del metodo dell'operazione viene visualizzato nella classe come "newCatalog2". Nelle righe seguenti viene mostrato il risultato dopo avere conformato a questo file WSDL:

[Visual Basic]
Public newCatalog As String

'''<remarks> [UserName::Date] This Web method was added after conforming this service to the WSDL file. </remarks>
<System.Web.Services.WebMethod(MessageName="newCatalog")> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="MyWebService")> _
Public Sub getCatalog2()
...
End Sub

[Visual C#]
public string newCatalog;

/// <remarks> [UserName::Date] This Web method was added after conforming this service to the WSDL file. </remarks>
[System.Web.Services.WebMethod(MessageName="newCatalog"), System.Web.Services.Protocols.SoapDocumentMethod(Binding = "MyWebService")]
public string newCatalog2()
{...}

Aggiornare le firme dell'operazione

Se il file WSDL descrive un’operazione, che corrisponde ad un’operazione nella classe del servizio Web, Visual Studio aggiorna la firma dell’operazione ed i suoi attributi nella classe. Nell’elenco seguente vengono descritti i criteri utilizzati per confrontare le operazioni tra la classe del servizio Web ed il file WSDL. Nei seguenti esempi questi criteri confrontano il codice della classe con un’operazione WSDL denominata “getCatalog” (con lo stesso nome messaggio): 

  • Un'operazione della classe "corrisponde" se ha lo stesso nome messaggio, ma non lo stesso nome del metodo dell’operazione WSDL.

    Nota:

    L'attributo MessageName identifica il nome del messaggio dell'operazione.

    Ad esempio, la seguente operazione della classe corrisponde all’operazione WSDL "getCatalog":

    [System.Web.Services.WebMethod(MessageName = "getCatalog")]
    public void getNewCatalog()
    
  • Un'operazione della classe "corrisponde" se non ha nome del messaggio, ma ha lo stesso nome del metodo dell’operazione WSDL.

    Ad esempio, la seguente operazione della classe corrisponde all’operazione WSDL "getCatalog":

    [System.Web.Services.WebMethod()]
    public void getCatalog()
    
  • Un'operazione della classe non corrisponde se ha lo stesso nome del metodo, ma un diverso nome del messaggio rispetto all’operazione WSDL.

    Ad esempio, la seguente operazione della classe non corrisponde all’operazione WSDL "getCatalog":

    [System.Web.Services.WebMethod(MessageName = "getGolfCatalog")]
    public void getCatalog()
    
  • Un metodo della classe non è considerato un'operazione se ha lo stesso nome del metodo, ma non ha l’attributo WebMethod. Questo metodo rimane invariato. Una nuova firma dell'operazione e gli attributi corrispondenti vengono invece aggiunti alla classe.

    Ad esempio, il metodo della classe seguente non corrisponde all’operazione WSDL "getCatalog" poiché gli manca l’attributo WebMethod ed è quindi lasciato immutato:

    public void getCatalog()
    

Rimozione degli attributi WebMethod dalle firme dell'operazione

Se la classe del servizio Web implementa un'operazione non descritta nel file WSDL, Visual Studio rimuove nella classe l'attributo WebMethod e gli altri attributi corrispondenti da quell'operazione. L'operazione viene modificata in un metodo non Web.

Ad esempio, nelle righe seguenti viene mostrata un'operazione con l'attributo WebMethod e gli altri corrispondenti attributi prima che venga conformata ad un file WSDL:

[Visual Basic]
<System.Web.Services.WebMethod()> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="myWebService")> _
Public Sub getCatalog()
...
End Sub

[Visual C#]
[System.Web.Services.WebMethod(), System.Web.Services.Protocols.SoapDocumentMethod(Binding = "myWebService")]
public void getCatalog()
{...}

Le righe seguenti mostrano come l’operazione perde l'attributo WebMethod e gli altri attributi dopo essere stata conformata ad un file WSDL che non descrive questa operazione. L'operazione diviene un metodo non Web:

[Visual Basic]
''' <remarks>[UserName::Date] The WebMethod attribute was removed after conforming this service to the WSDL file. This operation does not exist under the corresponding port type in the WSDL file. </remarks>
Public Sub getCatalog()
...
End Sub

[Visual C#]
/// <remarks>[UserName::Date] The WebMethod attribute was removed after conforming this service to the WSDL file. This operation does not exist under the corresponding port type in the WSDL file. </remarks>
public void getCatalog() 
{...}

Aggiornare gli attributi del servizio Web e delle operazioni

Se gli attributi della classe del servizio Web o le operazioni non corrispondono al file WSDL, Visual Studio li aggiorna nella classe. Ad esempio:

  • Il nome del servizio Web e lo spazio dei nomi potrebbero essere aggiornati.

    Se il nome del servizio e lo spazio dei nomi nella classe non sono gli stessi di quelli nel file WSDL, essi vengono aggiornati in Visual Studio. Visual Studio aggiorna questi valori nella classe come parte dell’attributo WebServiceBinding.

  • Vengono aggiornati i nomi di associazione di ogni operazione.

    Se il nome associazione di ogni operazione nella classe non è lo stesso di quello nel file WSDL, il nome associazione viene aggiornato in Visual Studio. Questo valore viene aggiornato nella classe come parte dell’attributo SoapDocumentMethod di ogni operazione.

L'elenco seguente contiene altri attributi che potrebbe essere aggiornati:

  • WebMethod

  • WebService

  • SoapDocumentService

  • SoapRpcMethod

  • SoapRpcService

Nessun attributo aggiunto dall'utente verrà modificato.

Aggiunta e rimozione di definizioni di tipo personalizzate

Le firme dell'operazione aggiunte da un file WSDL potrebbero fare riferimento a tipi personalizzati. Una volta che l'applicazione associata viene implementata, uno o più file di classe potrebbero essere visualizzati nella soluzione. Questi file contengono le corrispondenti definizioni dei tipi. I nomi dei file rispetteranno il seguente formato:

"<ServiceName><CustomTypeName>.< FileExtension >"

Nota:

L'estensione del file dipende dal linguaggio di implementazione.

In questi file, gli spazi dei nomi che contengono queste definizioni dei tipi utilizzano il seguente formato:

Namespace <DefaultNamespace>.<ServiceName>CustomTypes 

Ad esempio, supporre che un file WSDL descriva un servizio denominato "MyService." Questo servizio fornisce un'operazione che fa riferimento ad un tipo personalizzato denominato "MyCustomType."

Quando si conforma un endpoint servizio Web a questo file WSDL, anche la firma della nuova operazione fa riferimento al tipo personalizzato. Il nome del file del tipo è "MyServiceMyCustomType.vb" o "MyServiceMyCustomType.cs", a seconda se l'applicazione associata è implementata in Visual Basic o Visual C#. In questo file, lo spazio dei nomi e la definizione del tipo vengono visualizzati come segue:

[Visual Basic]
Namespace ApplicationName.MyServiceCustomTypes
   Public Class MyCustomType
   ...
   End Class
End Namespace

[Visual C#]
namespace ApplicationName.MyServiceCustomTypes 
{
   public class MyCustomType
   {...}
}

Quando si conforma un endpoint servizio Web ad un file WSDL, si verificano diverse modifiche in questi file in base alle seguenti condizioni:

  • I nomi del servizio sono gli stessi ma nessuna definizione di tipi esistente ha lo stesso nome dei tipi descritti nel file WSDL.

    In questo scenario, alla soluzione vengono aggiunti nuovi file dei tipi. Questi file contengono le definizioni per i nuovi tipi descritti nel file WSDL. Queste definizioni vengono visualizzate all'interno degli spazi dei nomi con il nome del servizio.

  • I nomi del servizio sono gli stessi ma una o più definizioni di tipi esistenti ha lo stesso nome dei tipi descritti nel file WSDL.

    In questo scenario, Visual Studio rinomina la definizione del tipo esistente aggiungendo il testo "_Obsolete" al nome del tipo. Visual Studio aggiunge la nuova definizione nello stesso file del tipo e nello stesso spazio dei nomi del tipo precedentemente in conflitto . Le operazioni per questo servizio Web faranno quindi riferimento al nuovo tipo anziché al tipo precedentemente in conflitto.

    Nota:

    Se lo spazio dei nomi contiene già un tipo rinominato con la stringa "_Obsolete", Visual Studio aggiunge un numero ordinale a questa stringa per produrre un nome univoco.

    Ad esempio, supporre che il file del tipo contenga un tipo denominato "myCustomType". Visual Studio lo rinomina in "myCustomType_Obsolete" se anche il file WSDL descrive un tipo con lo stesso nome. Visual Studio aggiunge quindi la definizione del tipo al file del tipo.

    Se il file del tipo contiene "myCustomType_Obsolete" e "myCustomType", Visual Studio rinomina "myCustomType" in "myCustomType_Obsolete2". Visual Studio aggiunge la definizione del tipo al file del tipo.

  • I nomi del servizio sono differenti.

    In questo caso, Visual Studio non modifica nessuno dei file del tipo esistenti. Visual Studio aggiunge invece alla soluzione i nuovi file del tipo con il nuovo nome del servizio. Questi file contengono le definizioni per i tipi descritti nel file WSDL. Queste definizioni vengono visualizzate negli spazi dei nomi che utilizzano il nuovo nome del servizio.

    Nota:

    Anche la classe del servizio Web verrà aggiornata con il nuovo nome del servizio.

Per ulteriori informazioni sui tipi personalizzati, vedere Endpoint servizio Web basati su file WSDL.

Conformare solo le prime operazioni corrispondenti

Una classe del servizio Web potrebbe implementare più operazioni corrispondenti ad un'operazione descritte nel file WSDL. In questo caso, solo la prima corrispondenza della firma dell’operazione verrà conformata al file WSDL. Le restanti firme dell'operazione corrispondenti non verranno modificate.

Per correggere questo problema, confermare che corretta firma dell'operazione è stata conformata. Se opportuno, modificare le altre operazioni corrispondenti per evitare duplicati in futuro.

Aggiunta di commenti sulle modifiche ai file di codice

Commenti generici che descrivono le modifiche fatte ai file di codice verranno aggiunti da Visual Studio. Questi commenti includono la data ed il nome dell’utente che ha apportato le modifiche.

Vedere anche

Attività

Procedura: rendere conformi gli endpoint servizio Web ai file WSDL