<userDefinedType>
Representa um tipo definido pelo usuário (UDT) que deve ser incluído no contrato de serviço.
<configuration>
<system.serviceModel>
<comContracts>
<comContract>
<userDefinedTypes>
<userDefinedType>
Syntax
<comContracts>
<comContract>
<userDefinedTypes>
<userDefinedType name="String"
typeLibID="String"
typeLibVersion="String"
typeDefID="String">
</userDefinedType>
</userDefinedTypes>
</comContract>
</comContracts>
Atributos e elementos
As seções a seguir descrevem atributos, elementos filho e elementos pai.
Atributos
Atributo | Descrição |
---|---|
name |
Um atributo opcional que contém uma cadeia de caracteres que fornece o nome do tipo legível. Isso não é usado pelo runtime, mas ajuda um leitor a distinguir os tipos. |
TypeDefID |
Uma cadeia de caracteres GUID que identifica o tipo UDT específico dentro da biblioteca de tipos registrada. |
TypeLibID |
Uma cadeia de caracteres GUID que identifica a biblioteca de tipos registrada que define o tipo. |
TypeLibVersion |
Uma cadeia de caracteres que identifica a versão da biblioteca de tipos que define o tipo. |
Elementos filho
Nenhum.
Elementos pai
Elemento | Descrição |
---|---|
userDefinedTypes |
Uma coleção de elementos userDefinedType . |
Comentários
O runtime de integração COM+ cria serviços inspecionando a biblioteca de tipos. Quando um componente COM+ contém métodos que transmitem uma VARIANT, o sistema não pode determinar os tipos reais a serem transmitidos antes do runtime. Portanto, quando você tenta transmitir um UDT (tipo definido pelo usuário) em uma VARIANT, isso falha porque não é um tipo conhecido para serialização.
Para contornar esse problema, adicione os UDTs ao arquivo de configuração para que eles possam ser incluídos como tipos conhecidos no contrato de serviço apropriado. Para fazer isso, você precisa identificar exclusivamente o UDT e os contratos, ou seja, as interfaces COM originais que o usam.
O exemplo a seguir demonstra a adição de dois UDTs específicos à seção <userDefinedTypes
> do arquivo de configuração para essa finalidade.
<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 o serviço é inicializado, o runtime de integração pesquisa os tipos especificados e os adiciona à coleção de tipos conhecidos para os contratos especificados.