ComContractElement.UserDefinedTypes Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene una colección de tipos definidos por el usuario (UDT) que se va a incluir en el contrato de servicio. Esta clase no puede heredarse.
public:
property System::ServiceModel::Configuration::ComUdtElementCollection ^ UserDefinedTypes { System::ServiceModel::Configuration::ComUdtElementCollection ^ get(); };
[System.Configuration.ConfigurationProperty("userDefinedTypes")]
public System.ServiceModel.Configuration.ComUdtElementCollection UserDefinedTypes { get; }
[<System.Configuration.ConfigurationProperty("userDefinedTypes")>]
member this.UserDefinedTypes : System.ServiceModel.Configuration.ComUdtElementCollection
Public ReadOnly Property UserDefinedTypes As ComUdtElementCollection
Valor de propiedad
Colección de tipos definidos por el usuario (UDT).
- Atributos
Ejemplos
En el ejemplo siguiente se muestra cómo agregar dos UDT específicos a la <userDefinedTypes> sección 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" requiresSession="true">
<userDefinedTypes>
<userDefinedType name="CustomerType"
typeLibID="{91DC728C-4F1A-45de-A9B6-B538E209CEA6}"
typeLibVersion="1.0"
typeDefID="{D129765C-F211-434e-825A-9A63198C41F2}" />
<userDefinedType name="AddressType"
typeLibID="{91DC728C-4F1A-45de-A9B6-B538E209CEA6}"
typeLibVersion="1.0"
typeDefID="{4616AE0D-687A-43B7-BC63-141AE3DFD099}" />
</userDefinedTypes>
<exposedMethods>
<add exposedMethod ="BuyStock" />
<add exposedMethod ="SellStock" />
<add exposedMethod ="ExecuteTransaction" />
</exposedMethods>
</comContract>
</comContracts>
Los atributos del elemento se definen de la <userDefinedType> siguiente manera:
typeName: atributo opcional que proporciona el nombre de tipo legible. El tiempo de ejecución no lo usa, pero ayuda a un lector a distinguir los tipos.typeLibID: cadena GUID que especifica la biblioteca de tipos registrada que define el tipo.typeLibVersion: cadena que especifica la versión de la biblioteca de tipos que define el tipo.typeDefID: cadena GUID que especifica el tipo UDT específico dentro de la biblioteca de tipos registrada.
Cuando se inicializa el servicio, integration Runtime busca los tipos especificados y los agrega a la colección de tipos conocidos para los contratos especificados.
Comentarios
El entorno de ejecución de integración com+ crea servicios inspeccionando la biblioteca de tipos. Cuando un componente COM+ contiene métodos que pasan un VALOR VARIANT, el sistema no puede determinar los tipos reales que se van a pasar antes del tiempo de ejecución. Por lo tanto, cuando se intenta pasar un tipo definido por el usuario (UDT) dentro de un VARIANT, se produce un error porque no es un tipo conocido para la serialización.
Para evitar este problema, puede agregar los UDT al archivo de configuración para que se puedan incluir como tipos conocidos en el contrato de servicio adecuado. Para ello, debe identificar de forma única el UDT y los contratos, es decir, las interfaces COM originales que lo usan.