Freigeben über


<Userdefinedtype>

Stellt einen benutzerdefinierten Typ (User Defined Type, UDT) dar, der im Dienstvertrag enthalten sein soll.

<Konfiguration>
   <system.serviceModel>
     <comContracts>
       <comContract>
         <userDefinedTypes>
           <Userdefinedtype>

Syntax

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

Attribute und Elemente

In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.

Attribute

Merkmal Description
name Ein optionales Attribut, das eine Zeichenfolge enthält, die den lesbaren Typnamen bereitstellt. Dies wird nicht von der Laufzeit verwendet, sondern hilft einem Leser, die Typen zu unterscheiden.
TypeDefID Eine GUID-Zeichenfolge, die den spezifischen UDT-Typ innerhalb der registrierten Typbibliothek identifiziert.
TypeLibID Eine GUID-Zeichenfolge, die die registrierte Typbibliothek identifiziert, die den Typ definiert.
TypeLibVersion Eine Zeichenfolge, die die Typbibliotheksversion identifiziert, die den Typ definiert.

Untergeordnete Elemente

Keiner.

Übergeordnete Elemente

Element Description
userDefinedTypes Eine Sammlung von userDefinedType Elementen.

Bemerkungen

Die COM+-Integrationslaufzeit erstellt Dienste durch Prüfen der Typbibliothek. Wenn eine COM+-Komponente Methoden enthält, die einen VARIANT übergeben, kann das System die tatsächlichen Typen nicht ermitteln, die vor der Laufzeit übergeben werden sollen. Wenn Sie daher versuchen, einen benutzerdefinierten Typ (User Defined Type, UDT) innerhalb einer VARIANT-Datei zu übergeben, schlägt er fehl, da es sich nicht um einen bekannten Typ für die Serialisierung handelt.

Um dieses Problem zu umgehen, können Sie die UDTs der Konfigurationsdatei hinzufügen, sodass sie als bekannte Typen im entsprechenden Dienstvertrag eingeschlossen werden können. Um dies zu tun, müssen Sie die UDT und die Verträge eindeutig identifizieren, d. h. die ursprünglichen COM-Schnittstellen, die sie verwenden.

Das folgende Beispiel veranschaulicht das Hinzufügen von zwei spezifischen UDTs zum <userDefinedTypes> Abschnitt der Konfigurationsdatei zu diesem Zweck.

<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>

Wenn der Dienst initialisiert wird, sucht die Integrationslaufzeit nach den angegebenen Typen und fügt sie der bekannten Typenauflistung für die angegebenen Verträge hinzu.

Siehe auch