Vorgehensweise: Migrieren von ASP.NET-Webdienstcode zu Windows Communication FoundationHow to: Migrate ASP.NET Web Service Code to the Windows Communication Foundation

Das folgende Verfahren beschreibt, wie ein ASP.NET-Webdienst zu Windows Communication Foundation (WCF) migrieren.The following procedure describes how to migrate an ASP.NET Web Service to Windows Communication Foundation (WCF).

ProzedurProcedure

So migrieren Sie ASP.NET-Webdienstcode zu WCFTo migrate ASP.NET Web service code to WCF

  1. Stellen Sie sicher, dass für den Dienst ein umfassender Satz von Tests vorhanden ist.Ensure that a comprehensive set of tests exist for the service.

  2. Generieren Sie die WSDL für den Dienst, und speichern Sie eine Kopie in dem Ordner, in dem sich auch die ASMX-Datei des Diensts befindet.Generate the WSDL for the service and save a copy in the same folder as the service’s .asmx file.

  3. Aktualisieren Sie den ASP.NET-Webdienst für die Verwendung von .NET 2.0.Upgrade the ASP.NET Web service to use .NET 2.0. Zuerst .NET Framework 2.0 für die Anwendung in IIS bereitzustellen, und verwenden Sie Visual Studio 2005 den codeumwandlungsprozess automatisieren, wie im Step Guide to Converting Web Projects aus Visual Studio .NET 2002/2003 to Visual Studio 2005.First deploy the .NET Framework 2.0 to the application in IIS, and then use Visual Studio 2005 to automate the code conversion process, as documented in Step-By-Step Guide to Converting Web Projects from Visual Studio .NET 2002/2003 to Visual Studio 2005. Führen Sie die Tests aus.Run the set of tests.

  4. Geben Sie explizite Werte für den Namespace und die Name-Parameter der WebService-Attribute an, sofern diese nicht bereits vorhanden sind.Provide explicit values for the Namespace and Name parameters of the WebService attributes if they are not provided already. Führen Sie die gleichen Schritte für die MessageName-Parameter von WebMethodAttribute aus.Do the same for the MessageName parameter of the WebMethodAttribute. Sind für die SOAPAction-HTTP-Header, gemäß denen Anforderungen zu Methoden geroutet werden, noch keine expliziten Werte angegeben, geben Sie explizit den Standardwert für den Action-Parameter mit einem SoapDocumentMethodAttribute an.If explicit values are not already provided for the SOAPAction HTTP headers by which requests are routed to methods, then explicitly specify the default value of the Action parameter with a SoapDocumentMethodAttribute.

    [WebService(Namespace = "http://tempuri.org/", Name = "Adder")]  
    public class Adder  
    {  
         [WebMethod(MessageName = "Add")]  
         [SoapDocumentMethod(Action = "http://tempuri.org/Add")]  
         public double Add(SumInput input)  
         {  
              double sum = 0.00;  
              foreach (double inputValue in input.Input)  
              {  
                  sum += inputValue;  
              }  
          return sum;  
         }  
    }  
    
  5. Testen Sie die Änderung.Test the change.

  6. Verschieben Sie sämtlichen substanziellen Code im Textkörper der Methoden der Klasse in eine separate Klasse, die von der ursprünglichen Klasse verwendet wird.Move any substantive code in the bodies of the methods of the class to a separate class that the original class is made to use.

    [WebService(Namespace = "http://tempuri.org/", Name = "Adder")]  
    public class Adder  
    {  
         [WebMethod(MessageName = "Add")]  
         [SoapDocumentMethod(Action = "http://tempuri.org/Add")]  
         public double Add(SumInput input)  
         {  
              return new ActualAdder().Add(input);  
         }  
    }  
    
    internal class ActualAdder  
    {  
         internal double Add(SumInput input)  
         {  
              double sum = 0.00;  
              foreach (double inputValue in input.Input)  
              {  
                  sum += inputValue;  
              }  
          return sum;  
         }  
    }  
    
  7. Testen Sie die Änderung.Test the change.

  8. Fügen Sie der ASP.NET Web Service-Projekt Verweise auf WCF-Assemblys System.ServiceModel und System.Runtime.Serialization hinzu.Add references to WCF assemblies System.ServiceModel and System.Runtime.Serialization to the ASP.NET Web service project.

  9. Führen Sie ServiceModel Metadata Utility Tool (Svcutil.exe) aus WSDL eine WCF-Clientklasse generiert.Run ServiceModel Metadata Utility Tool (Svcutil.exe) to generate a WCF client class from the WSDL. Fügen Sie der Lösung das generierte Klassenmodul hinzu.Add the generated class module to the solution.

  10. Das im vorangehenden Schritt generierte Klassenmodul enthält die Definition einer Schnittstelle.The class module generated in the preceding step contains the definition of an interface.

    [System.ServiceModel.ServiceContractAttribute()]  
    public interface AdderSoap  
    {  
         [System.ServiceModel.OperationContractAttribute(  
          Action="http://tempuri.org/Add",   
          ReplyAction="http://tempuri.org/Add")]  
         AddResponse Add(AddRequest request);  
    }  
    

    Passen Sie die Definition der ASP.NET-Webdienstklasse so an, dass für die Klasse die Implementierung dieser Schnittstelle festgelegt ist. Im Folgenden finden Sie ein entsprechendes Codebeispiel.Modify the definition of the ASP.NET Web service class so that the class is defined as implementing that interface, as shown in the following sample code.

    [WebService(Namespace = "http://tempuri.org/", Name = "Adder")]  
    public class Adder: AdderSoap  
    {  
         [WebMethod(MessageName = "Add")]  
         [SoapDocumentMethod(Action = "http://tempuri.org/Add")]  
         public double Add(SumInput input)  
         {  
              return new ActualAdder().Add(input);  
         }  
    
         public AddResponse Add(AddRequest request)  
         {  
            return new AddResponse(  
            new AddResponseBody(  
            this.Add(request.Body.input)));  
         }  
    }  
    
  11. Kompilieren Sie das Projekt.Compile the project. Aufgrund des in Schritt9 generierten Codes treten möglicherweise einige Fehler auf, da einige Typdefinitionen dupliziert wurden.There may be some errors due to the code generated in step nine that duplicated some type definitions. Beheben Sie diese Fehler. In der Regel ist hierzu das Löschen der bereits vorhandenen Typendefinitionen ausreichend.Repair those errors, usually by deleting the pre-existing definitions of the types. Testen Sie die Änderung.Test the change.

  12. Entfernen Sie die ASP.NET-spezifischen Attribute. Beispiele: WebService, WebMethodAttribute und SoapDocumentMethodAttribute.Remove the ASP.NET-specific attributes, such as the WebService, WebMethodAttribute and SoapDocumentMethodAttribute.

    public class Adder: AdderSoap  
    {  
         public double Add(SumInput input)  
         {  
              return new ActualAdder().Add(input);  
         }  
    
         public AddResponse Add(AddRequest request)  
         {  
              return new AddResponse(  
             new AddResponseBody(  
            this.Add(request.Body.input)));  
         }  
    }  
    
  13. Konfigurieren Sie die Klasse, die jetzt einen WCF-Diensttyp ASP.NET-Kompatibilitätsmodus von WCF erforderlich ist, wenn der ASP.NET-Webdienst auf eine der folgenden zugegriffen wird:Configure the class, which is now a WCF service type, to require WCF ASP.NET compatibility mode if the ASP.NET Web service relied on any of the following:

    • Der HttpContext-Klasse.The HttpContext class.

    • Den ASP.NET-Profilen.The ASP.NET Profiles.

    • Den ACLs für ASMX-Dateien.ACLs on .asmx files.

    • Den IIS-Authentifizierungsoptionen.IIS authentication options.

    • Den Identitätswechseloptionen von ASP.NET.ASP.NET impersonation options.

    • Der ASP.NET-Globalisierung.ASP.NET globalization.

    [System.ServiceModel.AspNetCompatibilityRequirements(  
      RequirementsMode=AspNetCompatbilityRequirementsMode.Required)]  
    public class Adder: AdderSoap  
    
  14. Benennen Sie die ursprüngliche ASMX-Datei zu .asmx.old um.Rename the original .asmx file to .asmx.old.

  15. Erstellen Sie eine WCF-Dienst-Datei für den Dienst, versehen Sie sie mit der Erweiterung .asmx, und speichern Sie ihn in das Stammverzeichnis der Anwendung in IIS.Create a WCF service file for the service, give it the extension, .asmx, and save it into the application root in IIS.

    <%@Service Class="MyOrganization.Adder" %>  
    <%@Assembly Name="MyServiceAssembly" %>   
    
  16. Fügen Sie einen WCF-Konfiguration für den Dienst zur Datei "Web.config" hinzu.Add a WCF configuration for the service to its Web.config file. Konfigurieren Sie den Dienst verwendet die <BasicHttpBinding >, zum Verwenden der Service-Datei mit der Erweiterung .asmx, die in den vorherigen Schritten erstellt und WSDL nicht für sich selbst zu generieren, aber die WSDL-Datei aus Schritt 2 verwendet.Configure the service to use the <basicHttpBinding>, to use the service file with the .asmx extension created in the preceding steps, and to not generate WSDL for itself, but to use the WSDL from step two. Konfigurieren Sie den Dienst zudem für die Verwendung des ASP.NET-Kompatibilitätsmodus (sofern erforderlich).Also configure it to use ASP.NET compatibility mode if necessary.

    <?xml version="1.0" encoding="utf-8" ?>  
    <configuration>  
     <system.web>  
      <compilation>  
      <buildProviders>  
       <remove extension=".asmx" />  
       <add extension=".asmx"   
        type=  
        "System.ServiceModel.Activation.ServiceBuildProvider,  
        T:System.ServiceModel, Version=2.0.0.0,   
       Culture=neutral,   
       PublicKeyToken=b77a5c561934e089" />  
      </buildProviders>  
      </compilation>  
     </system.web>  
     <system.serviceModel>  
      <services>  
      <service name="MyOrganization.Adder "  
        behaviorConfiguration="AdderBehavior">  
       <endpoint   
        address=""  
        binding="basicHttpBinding"  
        contract="AdderSoap "/>  
       </service>  
      </services>  
      <behaviors>  
      <behavior name="AdderBehavior">  
       <metadataPublishing   
        enableMetadataExchange="true"   
        enableGetWsdl="true"   
        enableHelpPage="true"   
        metadataLocation=  
        "http://MyHost.com/AdderService/Service.WSDL"/>  
      </behavior>  
      </behaviors>  
      <serviceHostingEnvironment   
       aspNetCompatibilityEnabled ="true"/>  
     </system.serviceModel>  
    </configuration>  
    
  17. Speichern Sie die Konfiguration.Save the configuration.

  18. Kompilieren Sie das Projekt.Compile the project.

  19. Vergewissern Sie sich durch Ausführen der Tests, dass alle Änderungen ordnungsgemäß funktionieren.Run the set of tests to make sure all the changes work.

Siehe auchSee Also

Vorgehensweise: Migrieren von ASP.NET-Webdienst-Clientcode zu Windows Communication FoundationHow to: Migrate ASP.NET Web Service Client Code to the Windows Communication Foundation