Partilhar via


<userDefinedType>

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

<configuração>
  <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 secções seguintes descrevem atributos, elementos subordinados e elementos principais.

Atributos

Atributo Descrição
name Um atributo opcional que contém uma cadeia que fornece o nome do tipo legível. Isto não é utilizado pelo runtime, mas ajuda um leitor a distinguir os tipos.
TypeDefID Uma cadeia GUID que identifica o tipo de UDT específico na biblioteca de tipos registados.
TypeLibID Uma cadeia GUID que identifica a biblioteca de tipos registados que define o tipo.
TypeLibVersion Uma cadeia que identifica a versão da biblioteca de tipos que define o tipo.

Elementos Subordinados

Nenhum.

Elementos Principais

Elemento Descrição
userDefinedTypes Uma coleção de userDefinedType elementos.

Observações

O runtime de integração COM+ cria serviços ao inspecionar a biblioteca de tipos. Quando um componente COM+ contém métodos que transmitem uma VARIANTE, o sistema não consegue determinar os tipos reais a serem transmitidos antes do runtime. Por conseguinte, quando tenta transmitir um Tipo Definido pelo Utilizador (UDT) numa VARIANTE, falha porque não é um tipo conhecido para serialização.

Para contornar este problema, pode adicionar os UDTs ao ficheiro de configuração para que possam ser incluídos como tipos conhecidos no contrato de serviço adequado. Para tal, tem de identificar exclusivamente o UDT e os contratos, ou seja, as interfaces COM originais que o utilizam.

O exemplo seguinte demonstra a adição de dois UDTs específicos à <userDefinedTypes> secção do ficheiro de configuração para esta 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 adiciona-os à coleção de tipos conhecidos para os contratos especificados.

Ver também