Modifications de code après la mise en conformité des points de terminaison de service Web avec les fichiers WSDL

Mise à jour : novembre 2007

Après avoir mis en conformité un point de terminaison de service Web implémenté avec un fichier WSDL (Web Services Description Language), il peut y avoir des modifications dans les fichiers de code suivants associés au point de terminaison :

  • Le fichier qui implémente la classe de service Web.

    Cette classe contient des signatures d'opération et tout code du corps de la méthode. Une opération est une méthode de classe avec l'attribut WebMethod et d'autres attributs connexes.

    Remarque :

    Aucun code du corps de la méthode n'est modifié lorsque vous mettez en conformité un point de terminaison implémenté. Toutefois, les modifications décrites dans cette rubrique peuvent provoquer l'arrêt de la compilation du code du corps de la méthode. Par conséquent, passez votre code en revue et identifiez les modifications pouvant être requises pour résoudre toute erreur du compilateur.

  • Un ou plusieurs fichiers de classe qui contiennent des définitions de type personnalisées.

Les modifications peuvent inclure les éléments suivants :

  • Ajout de nouvelles signatures d'opération

  • Mise à jour de signatures d'opération

  • Suppression d'attributs WebMethod de signatures d'opération

  • Mise à jour de services Web et d'attributs d'opération

  • Ajout ou changement de nom des définitions de type personnalisées

  • Mise en conformité des premières opérations correspondantes uniquement

  • Ajout de commentaires à propos des modifications aux fichiers de code

La fenêtre Détails de service Web reflète également les modifications appropriées. Les sections suivantes contiennent des informations supplémentaires sur ces modifications.

Ajout de nouvelles signatures d'opération

Si le fichier WSDL décrit une nouvelle opération, Visual Studio ajoute la signature et les attributs de cette opération à la classe de service Web. Vous pouvez identifier cette nouvelle opération en recherchant l'attribut WebMethod. 

Remarque :

Les méthodes de classe sans l'attribut WebMethod sont des méthodes non-Web, pas des opérations. De telles méthodes ne sont pas incluses lors de la comparaison d'opérations. Pour plus d'informations, consultez Mise à jour de signatures d'opération.

Le paramètre MessageName de la nouvelle opération correspond au nom de l'opération dans le fichier WSDL. Vous pouvez rechercher le paramètre MessageName dans l'attribut WebMethod de la signature de l'opération.

Remarque :

La nouvelle opération peut avoir le même nom qu'un membre de classe existant (à l'exclusion des méthodes non-Web). Dans ce cas, Visual Studio ajoute un ordinal au nom de méthode de la nouvelle opération, le rendant ainsi unique.

Par exemple, supposons que la classe de service Web contienne un membre nommé "newCatalog". Si le fichier WSDL décrit une opération nommée "newCatalog", le nom de méthode de l'opération apparaît comme "newCatalog2" dans cette classe. Les lignes suivantes affichent le résultat après s'être conformées à ce fichier 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()
{...}

Mise à jour de signatures d'opération

Si le fichier WSDL décrit une opération qui correspond à une opération dans la classe de service Web, Visual Studio met à jour la signature et les attributs de l'opération dans la classe. La liste suivante décrit les critères utilisés pour mettre en correspondance des opérations entre la classe de service Web et le fichier WSDL. Des exemples présentant ces critères comparent le code de classe à une opération WSDL nommée "getCatalog" (avec le même nom de message)" : 

  • Une opération de classe "correspond" si elle a le même nom de message, mais pas le même nom de méthode que l'opération WSDL.

    Remarque :

    L'attribut MessageName identifie le nom de message de l'opération.

    Par exemple, l'opération de classe suivante correspond à l'opération WSDL "getCatalog" :

    [System.Web.Services.WebMethod(MessageName = "getCatalog")]
    public void getNewCatalog()
    
  • Une opération de classe "correspond" si elle n'a aucune nom de message, mais le même nom de méthode que l'opération WSDL.

    Par exemple, l'opération de classe suivante correspond à l'opération WSDL "getCatalog" :

    [System.Web.Services.WebMethod()]
    public void getCatalog()
    
  • Une opération de classe ne "correspond" pas si elle a le même nom de méthode, mais un nom de message différent que l'opération WSDL.

    Par exemple, l'opération de classe suivante ne correspond pas à l'opération WSDL "getCatalog" :

    [System.Web.Services.WebMethod(MessageName = "getGolfCatalog")]
    public void getCatalog()
    
  • Une méthode de classe n'est pas considérée comme une opération si elle a le même nom de méthode, mais pas d'attribut WebMethod. Cette méthode reste inchangée. En fait, une nouvelle signature d'opération et les attributs correspondants sont ajoutés à la classe.

    Par exemple, la méthode de classe suivante ne correspond pas à l'opération WSDL "getCatalog" parce qu'il lui manque un attribut WebMethod et qu'elle reste inchangée :

    public void getCatalog()
    

Suppression d'attributs WebMethod de signatures d'opération

Si la classe de service Web implémente une opération non décrite dans le fichier WSDL, Visual Studio supprime l'attribut WebMethod et d'autres attributs correspondants de cette opération dans la classe. L'opération se transforme en une méthode non-Web.

Par exemple, les lignes suivantes affichent une opération avec son attribut WebMethod et d'autres attributs correspondants avant qu'elle se conforme à un fichier 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()
{...}

Les lignes suivantes indiquent la façon dont l'opération perd l'attribut WebMethod et d'autres attributs après s'être conformée à un fichier WSDL qui ne décrit plus cette opération. L'opération devient une méthode 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() 
{...}

Mise à jour de services Web et d'attributs d'opération

Si les attributs ou les opérations de la classe de service Web ne correspondent pas au fichier WSDL, Visual Studio les met à jour dans la classe. Par exemple :

  • Le nom de service Web et l'espace de noms peuvent être mis à jour.

    Si le nom du service et l'espace de noms dans la classe ne sont pas les mêmes que ceux dans le fichier WSDL, Visual Studio les met à jour. Visual Studiomet à jour ces valeurs dans la classe dans le cadre de l'attribut WebServiceBinding.

  • Le nom de liaison de chaque opération est mis à jour.

    Si le nom de liaison de chaque opération dans la classe n'est pas le même que celui dans le fichier WSDL, Visual Studio le met à jour. Il met à jour cette valeur dans la classe dans le cadre de l'attribut SoapDocumentMethod de chaque opération.

La liste suivante contient d'autres attributs qui peuvent être mis à jour :

  • WebMethod

  • WebService

  • SoapDocumentService

  • SoapRpcMethod

  • SoapRpcService

Aucun attribut ajouté par l'utilisateur n'est modifié.

Ajout ou changement de nom des définitions de type personnalisées

Les signatures d'opération ajoutées d'un fichier WSDL peuvent référencer des types personnalisés. Une fois que l'application associée est implémentée, un ou plusieurs fichiers de classe peuvent apparaître dans votre solution. Ces fichiers contiennent les définitions de type correspondantes. Leurs noms de fichier utilisent le format suivant :

" <NomService> <NomTypePersonnalisé>.<ExtensionFichier>"

Remarque :

L'extension de fichier dépend du langage d'implémentation.

Dans ces fichiers, les espaces de noms qui contiennent ces définitions de type utilisent le format suivant :

Namespace <DefaultNamespace>.<ServiceName>CustomTypes 

Par exemple, supposons qu'un fichier WSDL décrit un service nommé "MyService." Ce service fournit une opération qui référence un type personnalisé nommé "MyCustomType."

Lorsque vous effectuez la conformité d'un point de terminaison de service Web avec ce fichier WSDL, la signature de l'opération nouvellement ajoutée référence également ce type personnalisé. Le nom du fichier type est "MyServiceMyCustomType.vb" ou "MyServiceMyCustomType.cs", selon si l'application associée est implémentée dans Visual Basic ou dans Visual C#. Dans ce fichier type, l'espace de noms et la définition de type apparaissent comme suit :

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

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

Lorsque vous effectuez la conformité d'un point de terminaison de service Web avec un fichier WSDL, d'autres modifications se produisent dans ces fichiers en fonction des conditions suivantes :

  • Les noms du service sont les mêmes ; toutefois, aucune définition de type existante n'a le même nom que les types décrit dans le fichier WSDL.

    Dans ce scénario, de nouveaux fichiers types sont ajoutés à la solution. Ces fichiers contiennent des définitions pour les nouveaux types décrits dans le fichier WSDL. Ces définitions apparaissent dans des espaces de noms avec le nom du service.

  • Les noms du service sont les mêmes ; toutefois, une ou plusieurs définitions de type existantes ont le même nom que les types décrits dans le fichier WSDL.

    Dans ce scénario, Visual Studio renomme la définition de type existante en ajoutant le texte "_Obsolete" au nom de type. Visual Studio ajoute la définition du nouveau type au même fichier type et espace de noms comme le type précédemment en conflit. Les opérations pour ce service Web référencent ensuite le nouveau type au lieu de celui précédemment en conflit.

    Remarque :

    Si l'espace de noms contient déjà un type renommé avec la chaîne de "_Obsolete", Visual Studio ajoute un ordinal à cette chaîne pour produire un nom unique.

    Par exemple, supposons que le fichier type contienne un type nommé "myCustomType". Visual Studiole renomme "myCustomType_Obsolete" si le fichier WSDL décrit également un type avec le même nom. Visual Studio ajoute ensuite la définition de type au fichier type.

    Si le fichier type contient "myCustomType_Obsolete" et "myCustomType", Visual Studio renomme "myCustomType" en "myCustomType_Obsolete2". Visual Studio ajoute la définition de type au fichier type.

  • Les noms du service diffèrent.

    Dans ce scénario, Visual Studio ne modifie aucun des fichiers types existants. À la place, Visual Studio ajoute à la solution de nouveaux fichiers types avec le nouveau nom du service. Ces fichiers contiennent des définitions pour les types décrits dans le fichier WSDL. Ces définitions apparaissent dans les espaces de noms qui utilisent le nouveau nom du service.

    Remarque :

    La classe de service Web est également mise à jour avec le nouveau nom du service.

Pour plus d'informations sur les types personnalisés, consultez Points de terminaison de service Web basés sur des fichiers WSDL.

Mise en conformité des premières opérations correspondantes uniquement

Une classe de service Web peut implémenter plusieurs opérations qui correspondent à une opération décrite dans le fichier WSDL. Dans ce scénario, seule la première signature d'opérations correspondante se conforme au fichier WSDL. Les signatures d'opérations correspondantes restantes ne changent pas.

Pour corriger cette condition, vérifiez que la signature d'opération correcte a été mise en conformité. Le cas échéant, modifiez les autres opérations correspondantes pour éviter de futurs doublons.

Ajout de commentaires à propos des modifications aux fichiers de code

Visual Studioajoutera également des commentaires généraux qui décrivent ces modifications aux fichiers de code. Ces commentaires incluent la date et le nom de l'utilisateur qui a apporté ces modifications.

Voir aussi

Tâches

Comment : mettre en conformité les points de terminaison de service Web avec les fichiers WSDL