Compartilhar via


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

Confira também