Codeänderungen nach dem Anpassen von Webdienst-Endpunkten an WSDL-Dateien

Aktualisiert: November 2007

Nachdem Sie einen implementierten Webdienst-Endpunkt an eine WSDL (Web Services Description Language)-Datei angepasst haben, können sich Änderungen in den folgenden dem Endpunkt zugeordneten Codedateien ergeben:

  • Die Datei, die die Webdienstklasse implementiert

    Diese Klasse enthält Vorgangssignaturen und den Methodentextcode. Ein Vorgang ist eine Klassenmethode mit dem WebMethod-Attribut und anderen verwandten Attributen.

    Hinweis:

    Der Methodentextcode ändert sich nicht, wenn Sie einen implementierten Endpunkt anpassen. Die in diesem Thema beschriebenen Änderungen können jedoch bewirken, dass sich der Methodentextcode nicht mehr kompilieren lässt. Überprüfen Sie aus diesem Grund den Code, und ermitteln Sie Änderungen, die erforderlich sein könnten, um mögliche Compilerfehler zu beheben.

  • Eine oder mehrere Klassendateien, die benutzerdefinierte Typdefinitionen enthalten

Folgende Änderungen sind möglich:

  • 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

Das Fenster Webdienstdetails spiegelt auch die entsprechenden Änderungen wider. Die folgenden Abschnitte enthalten weitere Informationen zu diesen Änderungen.

Hinzufügen von neuen Vorgangssignaturen

Wenn die WSDL-Datei einen neuen Vorgang beschreibt, fügt Visual Studio die Vorgangssignatur und die Attribute dieses Vorgangs zur Webdienstklasse hinzu. Sie finden diese neue Vorgangssignatur, indem Sie nach dem WebMethod-Attribut suchen. 

Hinweis:

Klassenmethoden ohne das WebMethod-Attribut sind keine Vorgänge, sondern Methoden, die keine Webmethoden sind. Solche Methoden werden beim Vergleich von Vorgängen nicht eingeschlossen. Weitere Informationen finden Sie unter Updating Operation Signatures.

Der MessageName-Parameter des neuen Vorgangs entspricht dem Namen des Vorgangs in der WSDL-Datei. Sie finden den MessageName-Parameter im WebMethod-Attribut der Vorgangssignatur.

Hinweis:

Der neue Vorgang kann den gleichen Namen wie ein vorhandener Klassenmember (ausschließlich Methoden, die keine Webmethoden sind) aufweisen. In diesem Fall fügt Visual Studio dem Methodennamen des neuen Vorgangs eine Ordnungszahl hinzu und macht den Namen so eindeutig.

Angenommen, die Webdienstklasse enthält einen Member mit dem Namen "newCatalog". Wenn die WSDL-Datei einen Vorgang namens "newCatalog" beschreibt, wird der Methodenname des Vorgangs in dieser Klasse als "newCatalog2" angezeigt. Die folgenden Zeilen zeigen das Ergebnis nach der Anpassung an diese WSDL-Datei:

[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()
{...}

Aktualisieren von Vorgangssignaturen

Wenn die WSDL-Datei einen Vorgang beschreibt, der einem Vorgang in der Webdienstklasse entspricht, aktualisiert Visual Studio die Vorgangssignatur und deren Attribute in der Klasse. In der folgenden Liste werden Kriterien beschrieben, mit denen Übereinstimmungen zwischen Vorgängen in der Webdienstklasse und der WSDL-Datei ermittelt werden. In Beispielen, in denen diese Kriterien verwendet werden, wird Klassencode mit einem WSDL-Vorgang namens "getCatalog" verglichen (mit dem gleichen Meldungsnamen): 

  • Für einen Klassenvorgang liegt eine Übereinstimmung vor, wenn er den gleichen Meldungsnamen, jedoch nicht den gleichen Methodennamen wie der WSDL-Vorgang aufweist.

    Hinweis:

    Das MessageName-Attribut identifiziert den Meldungsnamen des Vorgangs.

    Zum Beispiel stimmt der folgende Klassenvorgang mit dem WSDL-Vorgang "getCatalog" überein:

    [System.Web.Services.WebMethod(MessageName = "getCatalog")]
    public void getNewCatalog()
    
  • Für einen Klassenvorgang liegt eine Übereinstimmung vor, wenn er keinen Meldungsnamen, jedoch den gleichen Methodennamen wie der WSDL-Vorgang aufweist.

    Zum Beispiel stimmt der folgende Klassenvorgang mit dem WSDL-Vorgang "getCatalog" überein:

    [System.Web.Services.WebMethod()]
    public void getCatalog()
    
  • Für einen Klassenvorgang liegt keine Übereinstimmung vor, wenn er den gleichen Methodennamen, jedoch einen anderen Meldungsnamen als der WSDL-Vorgang aufweist.

    Zum Beispiel stimmt der folgende Klassenvorgang nicht mit dem WSDL-Vorgang "getCatalog" überein:

    [System.Web.Services.WebMethod(MessageName = "getGolfCatalog")]
    public void getCatalog()
    
  • Eine Klassenmethode wird nicht als Vorgang betrachtet, wenn sie den gleichen Methodennamen, jedoch kein WebMethod-Attribut aufweist. Diese Methode wird nicht geändert. Stattdessen werden der Klasse eine neue Vorgangssignatur und die entsprechenden Attribute hinzugefügt.

    Zum Beispiel stimmt die folgende Klassenmethode nicht mit dem WSDL-Vorgang "getCatalog" überein, da ihr das WebMethod-Attribut fehlt, und wird deswegen nicht geändert:

    public void getCatalog()
    

Entfernen von WebMethod-Attributen aus Vorgangssignaturen

Wenn die Webdienstklasse einen Vorgang implementiert, der nicht in der WSDL-Datei beschrieben ist, entfernt Visual Studio das WebMethod-Attribut und andere entsprechende Attribute aus diesem Vorgang in der Klasse. Der Vorgang wird zu einer Methode, die keine Webmethode ist.

Die folgenden Zeilen zeigen z. B. einen Vorgang mit dem zugehörigen WebMethod-Attribut und anderen entsprechenden Attributen, bevor er an eine WSDL-Datei angepasst wird:

[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()
{...}

Die folgenden Zeilen zeigen, wie der Vorgang das WebMethod-Attribut und andere Attribute verliert, nachdem er an eine WSDL-Datei angepasst wurde, die diesen Vorgang nicht mehr beschreibt. Aus dem Vorgang wird eine Methode, die keine Webmethode ist:

[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() 
{...}

Aktualisieren des Webdiensts und der Vorgangsattribute

Wenn die Attribute der Webdienstklasse oder Vorgänge nicht der WSDL-Datei entsprechen, aktualisiert Visual Studio sie in der Klasse. Beispiel:

  • Der Webdienstname und der Namespace werden möglicherweise aktualisiert.

    Wenn der Webdienstname und der Namespace in der Klasse nicht dem Webdienstnamen und dem Namespace in der WSDL-Datei entsprechen, werden sie von Visual Studio aktualisiert. Visual Studio aktualisiert diese Werte in der Klasse als Teil des WebServiceBinding-Attributs.

  • Alle Bindungsnamen für Vorgänge werden aktualisiert.

    Wenn Bindungsnamen für Vorgänge in der Klasse nicht den Bindungsnamen in der WSDL-Datei entsprechen, aktualisiert Visual Studio den jeweiligen Bindungsnamen. Dieser Wert wird in der Klasse als Teil des SoapDocumentMethod-Attributs jedes Vorgangs aktualisiert.

Die folgende Liste enthält andere Attribute, die möglicherweise aktualisiert werden:

  • WebMethod

  • WebService

  • SoapDocumentService

  • SoapRpcMethod

  • SoapRpcService

Vom Benutzer hinzugefügte Attribute werden nicht geändert.

Hinzufügen oder Umbenennen von benutzerdefinierten Typdefinitionen

Vorgangssignaturen, die aus einer WSDL-Datei hinzugefügt wurden, verweisen möglicherweise auf benutzerdefinierte Typen. Sobald die zugeordnete Anwendung implementiert wird, werden möglicherweise eine oder mehrere Klassendateien in der Projektmappe angezeigt. Diese Dateien enthalten die entsprechenden Typdefinitionen. Die Dateinamen haben das folgende Format:

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

Hinweis:

Die Dateierweiterung hängt von der Implementierungssprache ab.

In diesen Dateien haben die Namespaces, die diese Typdefinitionen enthalten, das folgende Format:

Namespace <DefaultNamespace>.<ServiceName>CustomTypes 

Angenommen, eine WSDL-Datei beschreibt einen Dienst namens "MyService". Dieser Dienst stellt einen Vorgang bereit, der auf einen benutzerdefinierten Typ mit dem Namen "MyCustomType" verweist.

Wenn Sie einen Webdienst-Endpunkt an diese WSDL-Datei anpassen, verweist die neu hinzugefügte Vorgangssignatur auch auf diesen benutzerdefinierten Typ. Abhängig davon, ob die zugeordnete Anwendung in Visual Basic oder Visual C# implementiert wird, lautet der Name der Typdatei "MyServiceMyCustomType.vb" oder "MyServiceMyCustomType.cs". In dieser Typdatei werden der Namespace und die Typdefinition wie folgt angezeigt:

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

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

Wenn Sie einen Webdienst-Endpunkt an eine WSDL-Datei anpassen, werden verschiedene Änderungen in diesen Dateien vorgenommen. Dies hängt von den folgenden Bedingungen ab:

  • Die Dienstnamen sind gleich, jedoch weist keine der vorhandenen Typdefinitionen den gleichen Namen wie die Typen auf, die in der WSDL-Datei beschrieben werden.

    In diesem Szenario werden der Projektmappe neue Typdateien hinzugefügt. Diese Dateien enthalten Definitionen für die neuen Typen, die in der WSDL-Datei beschrieben werden. Diese Definitionen werden innerhalb von Namespaces mit dem Dienstnamen angezeigt.

  • Die Dienstnamen sind gleich, jedoch weisen eine oder mehrere der vorhandenen Typdefinitionen den gleichen Namen wie die Typen auf, die in der WSDL-Datei beschrieben werden.

    In diesem Szenario benennt Visual Studio die vorhandene Typdefinition um, indem der Text "_Obsolete" an den Typnamen angehängt wird. Visual Studio fügt die neue Typdefinition zu derselben Typdatei und demselben Namespace hinzu, wie den Typ, der vorher einen Konflikt verursacht hat. Vorgänge für diesen Webdienst verweisen dann auf den neuen Typ statt auf den Typ, der vorher einen Konflikt verursacht hat.

    Hinweis:

    Wenn der Namespace bereits einen umbenannten Typen mit der Zeichenfolge "_Obsolete" enthält, hängt Visual Studio einen Ordinalwert an diese Zeichenfolge an, um einen eindeutigen Namen zu erzeugen.

    Angenommen, die Typdatei enthält einen Typ namens "myCustomType". Visual Studio benennt diesen Typ in "myCustomType_Obsolete" um, wenn die WSDL-Datei auch einen Typ mit dem gleichen Namen beschreibt. Anschließend fügt Visual Studio die Typdefinition zur Typdatei hinzu.

    Wenn die Typdatei "myCustomType_Obsolete" und "myCustomType" enthält, benennt Visual Studio die Datei "myCustomType" in "myCustomType_Obsolete2" um. Visual Studio fügt die Typdefinition zur Typdatei hinzu.

  • Die Dienstnamen unterscheiden sich.

    In diesem Szenario ändert Visual Studio keine der vorhandenen Typdateien. Stattdessen fügt Visual Studio der Projektmappe neue Typdateien mit dem neuen Dienstnamen hinzu. Diese Dateien enthalten Definitionen für die Typen, die in der WSDL-Datei beschrieben werden. Diese Definitionen werden innerhalb von Namespaces angezeigt, die den neuen Dienstnamen verwenden.

    Hinweis:

    Die Webdienstklasse wird auch mit dem neuen Dienstnamen aktualisiert.

Weitere Informationen über benutzerdefinierte Typen finden Sie unter Webdienst-Endpunkte, die auf WSDL-Dateien basieren.

Anpassen von ausschließlich ersten übereinstimmenden Vorgängen

Eine Webdienstklasse kann möglicherweise mehrere Vorgänge implementieren, die mit einem in der WSDL-Datei beschriebenen Vorgang übereinstimmen. In diesem Szenario wird nur die erste übereinstimmende Vorgangssignatur an die WSDL-Datei angepasst. Die verbleibenden übereinstimmenden Vorgangssignaturen werden nicht geändert.

Um diese Bedingung zu korrigieren, vergewissern Sie sich, dass die richtige Vorgangssignatur angepasst wurde. Ändern Sie gegebenenfalls die anderen übereinstimmenden Vorgänge, um zukünftige Duplikate zu vermeiden.

Hinzufügen von Kommentaren zu Änderungen an Codedateien

Visual Studio fügt auch allgemeine Kommentare hinzu, in denen diese Änderungen an den Codedateien beschrieben werden. Diese Kommentare enthalten das Datum und den Namen des Benutzers, der diese Änderungen vorgenommen hat.

Siehe auch

Aufgaben

Gewusst wie: Anpassen von Webdienst-Endpunkten an WSDL-Dateien