Procedura: eseguire la migrazione del codice di un servizio Web ASP.NET a Windows Communication FoundationHow to: Migrate ASP.NET Web Service Code to the Windows Communication Foundation

La procedura seguente descrive come eseguire la migrazione di un servizio Web ASP.NET per Windows Communication Foundation (WCF).The following procedure describes how to migrate an ASP.NET Web Service to Windows Communication Foundation (WCF).

RoutineProcedure

Per eseguire la migrazione del codice di un servizio Web ASP.NET a WCFTo migrate ASP.NET Web service code to WCF

  1. Assicurarsi che esista un set completo di test per il servizio.Ensure that a comprehensive set of tests exist for the service.

  2. Generare il codice WSDL per il servizio e salvarne una copia nella stessa cartella del file con estensione asmx del servizio.Generate the WSDL for the service and save a copy in the same folder as the service’s .asmx file.

  3. Eseguire l'aggiornamento del servizio Web ASP.NET per usare .NET 2.0.Upgrade the ASP.NET Web service to use .NET 2.0. Prima di distribuire .NET Framework 2.0 per l'applicazione in IIS e quindi utilizzare Visual Studio 2005 per automatizzare il processo di conversione di codice, come documentato nel Guida dettagliata alla conversione di progetti Web da Visual Studio .NET 2002/2003 a 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. Eseguire il set di test.Run the set of tests.

  4. Fornire valori espliciti per i parametri Namespace and Name degli attributi WebService, se non sono già stati forniti.Provide explicit values for the Namespace and Name parameters of the WebService attributes if they are not provided already. Eseguire la stessa operazione per il parametro MessageName della classe WebMethodAttribute.Do the same for the MessageName parameter of the WebMethodAttribute. Se non sono già stati forniti valori espliciti per le intestazioni SOAPAction HTTP da cui le richieste vengono indirizzate ai metodi, specificare esplicitamente il valore predefinito del parametro Action con SoapDocumentMethodAttribute.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. Verificare la modifica.Test the change.

  6. Spostare qualsiasi codice effettivo presente nei corpi dei metodi della classe in una classe separata che verrà usata dalla classe originale.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. Verificare la modifica.Test the change.

  8. Aggiungere riferimenti agli assembly WCF System. ServiceModel e Serialization al progetto di servizio Web ASP.NET.Add references to WCF assemblies System.ServiceModel and System.Runtime.Serialization to the ASP.NET Web service project.

  9. Eseguire strumento ServiceModel Metadata Utility Tool (Svcutil.exe) per generare una classe client WCF da WSDL.Run ServiceModel Metadata Utility Tool (Svcutil.exe) to generate a WCF client class from the WSDL. Aggiungere il modulo di classe generato alla soluzione.Add the generated class module to the solution.

  10. Il modulo di classe generato nel passaggio precedente contiene la definizione di un'interfaccia.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);  
    }  
    

    Modificare la definizione della classe del servizio Web ASP.NET per specificare che classe implementa l'interfaccia in questione, come illustrato nel codice di esempio seguente.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. Compilare il progetto.Compile the project. Potrebbero verificarsi alcuni errori a causa del codice generato nel passaggio nove, che duplica alcune definizioni del tipo.There may be some errors due to the code generated in step nine that duplicated some type definitions. Correggere questi errori generalmente eliminando le definizioni dei tipi preesistenti.Repair those errors, usually by deleting the pre-existing definitions of the types. Verificare la modifica.Test the change.

  12. Rimuovere gli attributi specifici di ASP.NET, ad esempio WebService, WebMethodAttribute e 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. Configurare la classe, che ora è un tipo di servizio WCF, in modo da richiedere la modalità di compatibilità ASP.NET di WCF, se il servizio Web ASP.NET si basava su uno dei seguenti: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:

    • Classe HttpContext.The HttpContext class.

    • Profili ASP.NET.The ASP.NET Profiles.

    • ACL sui file con estensione asmx.ACLs on .asmx files.

    • Opzioni di autenticazione IISIIS authentication options.

    • Opzioni di rappresentazione ASP.NETASP.NET impersonation options.

    • Globalizzazione ASP.NETASP.NET globalization.

    [System.ServiceModel.AspNetCompatibilityRequirements(  
      RequirementsMode=AspNetCompatbilityRequirementsMode.Required)]  
    public class Adder: AdderSoap  
    
  14. Rinominare il file con estensione asmx originale in asmx.old.Rename the original .asmx file to .asmx.old.

  15. Creare un file del servizio WCF per il servizio, assegnargli l'estensione ASMX e salvarlo nella radice dell'applicazione 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. Aggiungere una configurazione di WCF per il servizio in un file Web. config.Add a WCF configuration for the service to its Web.config file. Configurare il servizio per utilizzare il <basicHttpBinding >, utilizzare il file del servizio con estensione ASMX creato nei passaggi precedenti e per non generare WSDL per se stesso, ma utilizzare il file WSDL dal passaggio 2.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. Configurare inoltre il servizio per usare la modalità di compatibilità ASP.NET, se necessario.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. Salvare la configurazione.Save the configuration.

  18. Compilare il progetto.Compile the project.

  19. Eseguire il set di test per assicurarsi che tutte le modifiche funzionino.Run the set of tests to make sure all the changes work.

Vedere ancheSee Also

Procedura: Eseguire la migrazione del codice client dei servizi Web ASP.NET in Windows Communication FoundationHow to: Migrate ASP.NET Web Service Client Code to the Windows Communication Foundation