Vorgehensweise: Verwenden von „Svcutil.exe“ zum Exportieren von Metadaten aus kompiliertem Dienstcode
"Svcutil.exe" kann Metadaten für Dienste, Verträge und Datentypen in kompilierten Assemblys wie folgt exportieren:
Zum Exportieren von Metadaten für alle kompilierten Dienstverträge für eine Assemblygruppe mithilfe von "Svcutil.exe" geben Sie die Assemblys als Eingabeparameter an. Dies ist das Standardverhalten.
Zum Exportieren von Metadaten für einen kompilierten Dienst mithilfe von "Svcutil.exe" geben Sie die Dienstassembly bzw. -assemblys als Eingabeparameter an. Sie müssen die
/serviceName
-Option verwenden, um den Konfigurationsnamen des Diensts anzugeben, den Sie exportieren möchten. "Svcutil.exe" lädt die Konfigurationsdatei für die angegebene ausführbare Assembly automatisch.Um alle Datenvertragstypen innerhalb einer Assemblygruppe zu exportieren, verwenden Sie die
/dataContractOnly
-Option.
Hinweis
Zum Angeben von Dateipfaden zu abhängigen Assemblys verwenden Sie die /reference
-Option.
So exportieren Sie Metadaten für kompilierte Dienstverträge
Kompilieren Sie die Dienstvertragsimplementierungen in eine oder mehrere Klassenbibliotheken.
Führen Sie "Svcutil.exe" auf den kompilierten Assemblys aus.
Hinweis
Zum Angeben des Dateipfads zur abhängigen Assembly müssen Sie möglicherweise den
/reference
-Schalter verwenden.svcutil.exe Contracts.dll
So exportieren Sie Metadaten füreinen kompilierten Dienst
Kompilieren Sie die Dienstimplementierung in eine ausführbare Assembly.
Erstellen Sie eine Konfigurationsdatei für die ausführbare Dienstdatei, und fügen Sie eine Dienstkonfiguration hinzu.
<?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>
Zum Angeben des Konfigurationsnamen des Diensts führen Sie "Svcutil.exe" für die kompilierte ausführbare Dienstdatei mithilfe des
/serviceName
-Schalters aus.Hinweis
Zum Angeben des Dateipfads zur abhängigen Assembly müssen Sie möglicherweise den
/reference
-Schalter verwenden.svcutil.exe /serviceName:MyService Service.exe /reference:path/Contracts.dll
So exportieren Sie Metadaten für kompilierte Datenverträge
Kompilieren Sie die Datenvertragsimplementierungen in eine oder mehrere Klassenbibliotheken.
Führen Sie "Svcutil.exe" für die kompilierten Assemblys mithilfe des
/dataContract
-Schalters aus, um anzugeben, dass nur Metadaten für Datenverträge generiert werden sollen.Hinweis
Zum Angeben des Dateipfads zur abhängigen Assembly müssen Sie möglicherweise den
/reference
-Schalter verwenden.svcutil.exe /dataContractOnly Contracts.dll
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie Metadaten für eine einfache Dienstimplementierung und -konfiguration generiert werden.
So exportieren Sie Metadaten für den Dienstvertrag
svcutil.exe Contracts.dll
So exportieren Sie Metadaten für Datenverträge
svcutil.exe /dataContractOnly Contracts.dll
So exportieren Sie Metadaten für die Dienstimplementierung
svcutil.exe /serviceName:MyService Service.exe /reference:<path>/Contracts.dll
Der <path>
entspricht dem Pfad zu "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>