Практическое руководство. Использование программы Svcutil.exe для экспорта метаданных из скомпилированного кода службы
При помощи Svcutil.exe можно экспортировать метаданные для служб, контрактов и типов данных в скомпилированных сборках, как показано далее.
Для экспорта метаданных всех скомпилированных контрактов службы для набора сборок при помощи Svcutil.exe необходимо указать сборки как входные параметры. Это поведение принимается по умолчанию.
Для экспорта метаданных скомпилированной службы для набора сборок при помощи Svcutil.exe необходимо указать сборку службы как входные параметры. Для указания имени конфигурации экспортируемой службы необходимо использовать параметр
/serviceName
. Svcutil.exe автоматически загружает файл конфигурации для указанной сборки исполняемого файла.Для экспорта всех типов контрактов данных внутри набора сборок используется параметр
/dataContractOnly
.
Примечание.
Для указания пути к файлам любых зависимых сборок используется параметр /reference
.
Экспорт метаданных в скомпилированные контракты службы
Компилируйте реализации контракта службы в одну или несколько библиотек классов.
Запустите Svcutil.exe в скомпилированных сборках.
Примечание.
Для указания пути к файлам любых зависимых сборок может понадобиться использование параметра
/reference
.svcutil.exe Contracts.dll
Экспорт метаданных в скомпилированную службу
Скомпилируйте реализацию службы в исполняемую сборку.
Создайте файл конфигурации для исполняемого файла службы и добавьте конфигурацию службы.
<?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>
Чтобы указать имя конфигурации службы, необходимо запустить Svcutil.exe в скомпилированном исполняемом файле службы при помощи параметра
/serviceName
.Примечание.
Для указания пути к файлам любых зависимых сборок может понадобиться использование параметра
/reference
.svcutil.exe /serviceName:MyService Service.exe /reference:path/Contracts.dll
Экспорт метаданных в скомпилированные контракты данных
Скомпилируйте реализации контракта данных в одну или несколько библиотек классов.
Чтобы задать генерацию только метаданных для контрактов данных, запустите Svcutil.exe в скомпилированных сборках с параметром
/dataContract
.Примечание.
Для указания пути к файлам любых зависимых сборок может понадобиться использование параметра
/reference
.svcutil.exe /dataContractOnly Contracts.dll
Пример
В следующем примере показано, как генерировать метаданные для реализации и конфигурации простой службы.
Экспорт метаданных в контракт службы.
svcutil.exe Contracts.dll
Экспорт метаданных в контракты данных.
svcutil.exe /dataContractOnly Contracts.dll
Экспорт метаданных в реализацию службы.
svcutil.exe /serviceName:MyService Service.exe /reference:<path>/Contracts.dll
<path>
является путем к файлу 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>