Compartilhar via


<userDefinedType>

Representa um UDT (Tipo Definido pelo Usuário) que deve ser incluído no contrato de serviço.

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

Sintaxe

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

Attributes

Attribute Description
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 na 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 Description
userDefinedTypes Uma coleção de userDefinedType elementos.

Observações

O runtime de integração COM+ cria serviços inspecionando a biblioteca de tipos. Quando um componente COM+ contém métodos que passam por uma VARIANT, o sistema não pode determinar os tipos reais a serem passados antes do runtime. Portanto, quando você tenta passar um UDT (Tipo Definido pelo Usuário) em um VARIANT, ele falha porque não é um tipo conhecido para serialização.

Para contornar esse problema, você pode adicionar 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 à <userDefinedTypes> seção 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 procura os tipos especificados e os adiciona à coleção de tipos conhecidos para os contratos especificados.

Consulte também