Procedura: usare Svcutil.exe per esportare metadati dal codice del servizio compilato

Svcutil.exe è in grado di esportare metadati per servizi, contratti e tipi di dati in assembly compilati, come segue:

  • Per esportare metadati per tutti i contratti di servizio compilati per un set di assembly utilizzando Svcutil.exe, specificare gli assembly come parametri di input. Si tratta del comportamento predefinito.

  • Per esportare metadati per un contratto di servizio utilizzando Svcutil.exe, specificare l'assembly o gli assembly del servizio come parametri di input. È necessario utilizzare l'opzione /serviceName per indicare il nome di configurazione del servizio che si desidera esportare. Svcutil.exe carica automaticamente il file di configurazione dell'assembly eseguibile specificato.

  • Per esportare tutti i tipi di contratto dati all'interno di un set di assembly, utilizzare l'opzione /dataContractOnly.

Nota

Usare l'opzione /reference per specificare il percorso dei file degli eventuali assembly dipendenti.

Per esportare metadati per contratti di servizio compilati

  1. Compilare le implementazioni del contratto di servizio in una o più librerie di classi.

  2. Eseguire Svcutil.exe sugli assembly compilati.

    Nota

    Potrebbe essere necessario usare l'opzione /reference per specificare il percorso del file di eventuali assembly dipendenti.

    svcutil.exe Contracts.dll  
    

Per esportare metadati per un servizio compilato

  1. Compilare l'implementazione del servizio in un assembly eseguibile.

  2. Creare un file di configurazione per l'eseguibile del servizio e aggiungere una configurazione del servizio.

    <?xml version="1.0" encoding="utf-8" ?>  
    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="MyService" >  
            <endpoint address="finder" contract="IPeopleFinder" binding="wsHttpBinding" />  
          </service>  
        </services>  
      </system.serviceModel>  
    </configuration>  
    
  3. Eseguire Svcutil.exe sull'eseguibile del servizio compilato utilizzando l'opzione /serviceName per specificare il nome di configurazione del servizio.

    Nota

    Potrebbe essere necessario usare l'opzione /reference per specificare il percorso del file di eventuali assembly dipendenti.

    svcutil.exe /serviceName:MyService Service.exe /reference:path/Contracts.dll  
    

Per esportare metadati per contratti dati compilati

  1. Compilare le implementazioni del contratto dati in una o più librerie di classi.

  2. Eseguire Svcutil.exe sugli assembly compilati utilizzando l'opzione /dataContract per specificare che devono essere generati solo i metadati dei contratti dati.

    Nota

    Potrebbe essere necessario usare l'opzione /reference per specificare il percorso del file di eventuali assembly dipendenti.

    svcutil.exe /dataContractOnly Contracts.dll  
    

Esempio

Nell'esempio seguente viene dimostrato come generare metadati per un'implementazione semplice del servizio e una configurazione.

Per esportare metadati per il contratto di servizio

svcutil.exe Contracts.dll  

Per esportare metadati per i contratti dati.

svcutil.exe /dataContractOnly Contracts.dll  

Per esportare metadati per l'implementazione del servizio

svcutil.exe /serviceName:MyService Service.exe /reference:<path>/Contracts.dll  

<path> è il percorso di Contracts.dll.

// The following service contract and data contracts are compiled into
// Contracts.dll.  
[ServiceContract(ConfigurationName="IPeopleFinder")]  
public interface IPersonFinder  
{  
    [OperationContract]  
    Address GetAddress(Person s);  
}  
  
[DataContract]  
public class Person  
{  
    [DataMember]  
    public string firstName;  
    [DataMember]  
    public string lastName;  
    [DataMember]  
    public int age;  
}  
  
[DataContract]  
public class Address  
{  
    [DataMember]  
    public string city;  
    [DataMember]  
    public string state;  
    [DataMember]  
    public string street;  
    [DataMember]  
    public int zipCode;  
    [DataMember]  
    public Person person;  
}  
// The following service implementation is compiled into Service.exe.
// This service uses the contracts specified in Contracts.dll.  
[ServiceBehavior(ConfigurationName = "MyService")]  
public class MyService : IPersonFinder  
{  
    public Address GetAddress(Person person)  
    {  
        Address address = new Address();  
        address.person = person;  
        return address;  
    }  
}  
<!-- The following is the configuration file for Service.exe. -->  
<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <system.serviceModel>  
    <services>  
      <service name="MyService">  
         <endpoint  address="finder"  
                    binding="basicHttpBinding"  
                    contract="IPeopleFinder"/>  
      </service>  
    </services>  
  </system.serviceModel>  
</configuration>  

Vedi anche