Partager via


Comment : récupérer des métadonnées et implémenter un service conforme

Souvent, la personne qui conçoit et implémente des services n'est pas la même. Dans les environnements où l'interaction d'applications est importante, les contrats peuvent être conçus ou décrits en WSDL (Web Services Description Language) et un développeur doit implémenter un service qui se conforme au contrat fourni. Vous pouvez souhaiter également effectuer une migration d'un service existant vers Windows Communication Foundation (WCF) mais conserver le format de transmission. De plus, les contrats duplex requièrent que les appelants implémentent également un contrat de rappel.

Dans ces cas, vous devez utiliser l'Outil Service Model Metadata Tool (Svcutil.exe) (ou un outil équivalent) pour générer une interface de contrat de service dans un langage managé que vous pouvez implémenter pour répondre aux spécifications du contrat. En général, l'Outil Service Model Metadata Tool (Svcutil.exe) est utilisé pour acquérir un contrat de service utilisé avec une fabrication de canal ou un type de client WCF ainsi qu'un fichier de configuration client qui configure la liaison et l'adresse correctes. Pour utiliser le fichier de configuration généré, vous devez le remplacer par un fichier de configuration de service. Vous devrez peut-être aussi modifier le contrat de service.

Pour récupérer des données et implémenter un service conforme

  1. Utilisez l'Outil Service Model Metadata Tool (Svcutil.exe) sur les fichiers de métadonnées ou un point de terminaison de métadonnées pour générer un fichier de code.

  2. Recherchez la portion du fichier de code de sortie qui contient l'interface souhaitée (s'il y en a plusieurs) marquée avec l'attribut System.ServiceModel.ServiceContractAttribute. L'exemple de code suivant affiche les deux interfaces générées par l'Outil Service Model Metadata Tool (Svcutil.exe). La première (ISampleService) est l'interface de contrat de service que vous implémentez pour créer un service conforme. La seconde (ISampleServiceChannel) est une interface d'assistance destinée au client qui étend à la fois l'interface de contrat de service et System.ServiceModel.IClientChannel, et qui est utilisée dans une application cliente.

  3. Si WSDL ne spécifie pas d'action de réponse pour toutes les opérations, les contrats d'opération générés peuvent avoir la propriété ReplyAction définie avec le caractère générique (*). Supprimez ce paramètre de propriété. Sinon, lorsque vous implémentez les métadonnées de contrat de service, celles-ci ne peuvent pas être exportées pour ces opérations.

  4. Implémentez l'interface sur une classe et hébergez le service. Pour un exemple, consultez Comment : implémenter un contrat de service Windows Communication Foundation ou consultez une implémentation simple ci-dessous dans la section Exemple.

  5. Dans le fichier de configuration client que génère Outil Service Model Metadata Tool (Svcutil.exe), remplacez la section de configuration <client> par une section de configuration <services>. (Pour obtenir un exemple d'un fichier de configuration d'application cliente généré, consultez la section « Exemple » suivante.)

  6. Dans la section de configuration <services>, créez un attribut name dans la section de configuration <services> pour votre implémentation de service.

  7. Affectez à l'attribut name de service le nom de configuration pour votre implémentation de service.

  8. Ajoutez les éléments de configuration de point de terminaison qui utilisent le contrat de service implémenté à la section de configuration du service.

Exemple

L'exemple de code suivant affiche l'essentiel d'un fichier de code généré en exécutant l'Outil Service Model Metadata Tool (Svcutil.exe) sur des fichiers de métadonnées.

L'exemple de code suivant montre :

  • L'interface de contrat de service qui, lorsqu'elle est implémentée, se conforme aux spécifications de contrat (ISampleService).

  • L'interface d'assistance destinée au client qui étend à la fois l'interface de contrat de service et System.ServiceModel.IClientChannel, et doit être utilisée dans une application cliente ISampleServiceChannel.

  • La classe d'assistance qui étend System.ServiceModel.ClientBase et doit être utilisée dans une application cliente (SampleServiceClient).

  • Le fichier de configuration généré à partir du service.

  • L'implémentation d'un service ISampleService simple.

  • Conversion du fichier de configuration côté client vers une version côté service.

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ISampleService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://localhost:8080/SampleService" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_ISampleService" contract="ISampleService"
                name="BasicHttpBinding_ISampleService" />
        </client>
    </system.serviceModel>
</configuration>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ISampleService" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service
          name="Microsoft.WCF.Documentation.SampleService">
        <endpoint address="https://localhost:8080/SampleService" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_ISampleService" contract="Microsoft.WCF.Documentation.ISampleService"
            />
      </service>
    </services>
  </system.serviceModel>
</configuration>

Voir aussi

Concepts

Outil Service Model Metadata Tool (Svcutil.exe)