Como: Usar Svcutil.exe para exportar metadados do código de serviço compilado
Svcutil.exe pode exportar metadados para serviços, contratos e tipos de dados em assemblies compilados, da seguinte maneira:
Para exportar metadados para todos os contratos de serviço compilados para um conjunto de assemblies usando Svcutil.exe, especifique os assemblies como parâmetros de entrada. Este é o comportamento predefinido.
Para exportar metadados para um serviço compilado usando Svcutil.exe, especifique o assembly ou assemblies de serviço como parâmetros de entrada. Você deve usar a
/serviceName
opção para indicar o nome de configuração do serviço que deseja exportar. Svcutil.exe carrega automaticamente o arquivo de configuração para o assembly executável especificado.Para exportar todos os tipos de contrato de dados dentro de um conjunto de assemblies, use a
/dataContractOnly
opção.
Nota
Use a /reference
opção para especificar os caminhos de arquivo para quaisquer assemblies dependentes.
Para exportar metadados para contratos de serviço compilados
Compile suas implementações de contrato de serviço em uma ou mais bibliotecas de classes.
Execute Svcutil.exe nos assemblies compilados.
Nota
Talvez seja necessário usar o
/reference
switch para especificar o caminho do arquivo para qualquer assembly dependente.svcutil.exe Contracts.dll
Para exportar metadados para um serviço compilado
Compile sua implementação de serviço em um assembly executável.
Crie um arquivo de configuração para seu executável de serviço e adicione uma configuração de serviço.
<?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>
Execute Svcutil.exe no executável do serviço compilado usando o
/serviceName
switch para especificar o nome de configuração do serviço.Nota
Talvez seja necessário usar o
/reference
switch para especificar o caminho do arquivo para qualquer assembly dependente.svcutil.exe /serviceName:MyService Service.exe /reference:path/Contracts.dll
Para exportar metadados para contratos de dados compilados
Compile suas implementações de contrato de dados em uma ou mais bibliotecas de classes.
Execute Svcutil.exe nos assemblies compilados usando o
/dataContract
switch para especificar que apenas metadados para contratos de dados devem ser gerados.Nota
Talvez seja necessário usar o
/reference
switch para especificar o caminho do arquivo para qualquer assembly dependente.svcutil.exe /dataContractOnly Contracts.dll
Exemplo
O exemplo a seguir demonstra como gerar metadados para uma implementação e configuração de serviço simples.
Para exportar metadados para o contrato de serviço.
svcutil.exe Contracts.dll
Para exportar metadados para os contratos de dados.
svcutil.exe /dataContractOnly Contracts.dll
Para exportar metadados para a implementação do serviço.
svcutil.exe /serviceName:MyService Service.exe /reference:<path>/Contracts.dll
O <path>
é o caminho para 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>