Compartir a través de


<userDefinedType>

Representa un tipo definido por el usuario (UDT) que se va a incluir en el contrato del servicio.

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

Sintaxis

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

Atributos y elementos

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Atributo Descripción
name Un atributo opcional que contiene una cadena que proporciona el nombre de tipo legible. El tiempo de ejecución no lo usa, pero ayuda a que un lector distinga los tipos.
TypeDefID Una cadena GUID que identifica el tipo UDT concreto dentro de la biblioteca de tipos registrados.
TypeLibID Una cadena GUID que identifica la biblioteca de tipos registrados que define el tipo.
TypeLibVersion Una cadena que identifica la versión de biblioteca de tipos que define el tipo.

Elementos secundarios

Ninguno.

Elementos primarios

Elemento Descripción
userDefinedTypes Una colección de elementos de userDefinedType.

Comentarios

El tiempo de ejecución de integración de COM+ crea los servicios mediante la inspección de la biblioteca de tipos. Cuando un componente de COM+ contiene métodos que pasan una VARIANTE, el sistema no puede determinar los tipos reales que se van a pasar antes del tiempo de ejecución. Por consiguiente, al intentar pasar un tipo definido por el usuario dentro de una VARIANTE , se produce un error porque no es un tipo conocido para la serialización.

Para prevenir este problema, puede agregar los UDT al archivo de configuración para que puedan estar incluidos como tipos conocidos en el contrato del servicio adecuado. Para ello, tiene que identificar de manera unívoca el UDT y los contratos, es decir, las interfaces COM originales que lo utilizan.

El ejemplo siguiente muestra la adición de dos UDT concretos a la sección <userDefinedTypes> del archivo de configuración para este propósito.

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

Cuando se inicializa el servicio, el tiempo de ejecución de integración busca los tipos especificados y los agrega a la colección de tipos conocidos para los contratos especificados.

Consulte también