Partager via


<userDefinedType>

Représente un type défini par l’utilisateur (UDT) qui doit être inclus dans le contrat de service.

<configuration>
  <system.serviceModel>
    <comContracts>
      <comContract>
        <userDefinedTypes>
          <userDefinedType>

Syntaxe

<comContracts>
  <comContract>
    <userDefinedTypes>
      <userDefinedType name="String"
                       typeLibID="String"
                       typeLibVersion="String"
                       typeDefID="String">
      </userDefinedType>
    </userDefinedTypes>
  </comContract>
</comContracts>

Attributs et éléments

Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.

Attributes

Caractéristique Descriptif
name Attribut facultatif qui contient une chaîne qui fournit le nom de type lisible. Cela n’est pas utilisé par le runtime, mais permet à un lecteur de distinguer les types.
TypeDefID Chaîne GUID qui identifie le type UDT spécifique dans la bibliothèque de types inscrite.
TypeLibID Chaîne GUID qui identifie la bibliothèque de types inscrite qui définit le type.
TypeLibVersion Chaîne qui identifie la version de la bibliothèque de types qui définit le type.

Éléments enfants

Aucun.

Éléments parents

Élément Descriptif
userDefinedTypes Collection d’éléments userDefinedType .

Remarques

Le runtime d’intégration COM+ crée des services en inspectant la bibliothèque de types. Lorsqu’un composant COM+ contient des méthodes qui passent un VARIANT, le système ne peut pas déterminer les types réels à passer avant l’exécution. Par conséquent, lorsque vous tentez de passer un type défini par l’utilisateur (UDT) dans un VARIANT, il échoue, car il n’est pas un type connu pour la sérialisation.

Pour contourner ce problème, vous pouvez ajouter les UDT au fichier de configuration afin qu’ils puissent être inclus en tant que types connus sur le contrat de service approprié. Pour ce faire, vous devez identifier de manière unique l’UDT et le ou les contrats, autrement dit l’interface COM d’origine qui l’utilise.

L’exemple suivant illustre l’ajout de deux UDT spécifiques à la <userDefinedTypes> section du fichier de configuration à cet effet.

<comContracts>
  <comContract contract="{5163B1E7-F0CF-4B6A-9A02-4AB654F34284}"
               namespace="http://tempuri.org/5163B1E7-F0CF-4B6A-9A02-4AB654F34284"
               name="_Broker"
               requireSession="true">
    <userDefinedTypes>
      <userDefinedType name="CustomerType"
                       typeLibID="{91DC728C-4F1A-45de-A9B6-B538E209CEA6}"
                       typeLibVersion="1.0"
                       typeDefID="{D129765C-F211-434e-825A-9A63198C41F2}">
      </userDefinedType>
      <userDefinedType name="AddressType"
                       typeLibID="{91DC728C-4F1A-45de-A9B6-B538E209CEA6}"
                       typeLibVersion="1.0"
                       typeDefID="{4616AE0D-687A-43B7-BC63-141AE3DFD099}">
      </userDefinedType>
    </userDefinedTypes>
    <exposedMethods>
      <exposedMethod name="BuyStock" />
      <exposedMethod name="SellStock" />
      <exposedMethod name="ExecuteTransaction" />
    </exposedMethods>
  </comContract>
</comContracts>

Lorsque le service est initialisé, le runtime d’intégration recherche les types spécifiés et les ajoute à la collection de types connus pour les contrats spécifiés.

Voir aussi