Condividi tramite


<tipoDefinitoDaUtente>

Rappresenta un tipo definito dall'utente (UDT) che deve essere incluso nel contratto di servizio.

<Configurazione>
  <system.serviceModel>
    <comContracts>
      <contrattoCom>
        <userDefinedTypes>
          <tipoDefinitoDaUtente>

Sintassi

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

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Descrizione
name Attributo facoltativo contenente una stringa che fornisce il nome tipo leggibile. Non viene usato dal runtime, ma aiuta un reader a distinguere i tipi.
TypeDefID Stringa GUID che identifica il tipo specifico definito dall'utente all'interno della libreria dei tipi registrati.
TypeLibID Stringa GUID che identifica la libreria dei tipi registrata che definisce il tipo.
TypeLibVersion Stringa che identifica la versione della libreria dei tipi che definisce il tipo.

Elementi figlio

Nessuno.

Elementi padre

Elemento Descrizione
userDefinedTypes Raccolta di elementi userDefinedType.

Commenti

Il runtime di integrazione COM+ crea servizi controllando la libreria dei tipi. Quando un componente COM+ contiene metodi che passano una VARIANT, il sistema non può determinare i tipi effettivi da passare prima della fase di esecuzione. Quando si tenta pertanto di passare un tipo definito dall'utente (UDT) all'interno di una VARIANT, l'operazione non riesce perché non è un tipo noto per la serializzazione.

Per aggirare questo problema, è possibile aggiungere tipi definiti dall'utente al file di configurazione in modo che possano essere inclusi come tipi noti nel contratto di servizio appropriato. A tale scopo, è necessario identificare in modo univoco i tipi definiti dall'utente e i contratti, ovvero le interfacce COM originali che li usano.

L'esempio seguente illustra l'aggiunta di due UDT specifici alla <userDefinedTypes> sezione del file di configurazione per questo scopo.

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

Quando il servizio viene inizializzato, il runtime di integrazione ricerca i tipi specificati e li aggiunge alla raccolta dei tipi noti per i contratti specificati.

Vedi anche