Поделиться через


<userDefinedType>

Представляет пользовательский тип (UDT), подлежащий включению в контракт службы.

Иерархия схемы

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

Синтаксис

<comContracts>
  <comContract>
      <userDefinedTypes>
         <userDefinedType name="string"
            typeLibID="string"
            typeLibVersion="string"
            typeDefID="string">
         </userDefinedType>
      </userDefinedTypes>
  </comContract>
</comContracts>

Атрибуты и элементы

В следующих разделах описываются атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут Описание

name

Необязательный атрибут, содержащий строку, которая задает отображаемое имя типа. Не используется средой выполнения, но помогает читателю различать типы.

TypeDefID

Строка идентификатора GUID, которая идентифицирует конкретный тип UDT в зарегистрированной библиотеке типов.

TypeLibID

Срока глобального уникального идентификатора (GUID), которая является идентификатором для зарегистрированной библиотеки типов, определяющей тип.

TypeLibVersion

Срока, которая является идентификатором версии библиотеки типов, определяющей тип.

Дочерние элементы

Нет.

Родительские элементы

Элемент Описание

userDefinedTypes

Коллекция элементов userDefinedType.

Замечания

Среда выполнения интеграции СОМ+ создает службы путем проверки библиотеки типов. Если в компоненте СОМ+ содержатся методы, которые служат для передачи VARIANT, система не в состоянии определить фактические типы для передачи до среды выполнения. Поэтому при попытке передать пользовательский тип (UDT) в рамках VARIANT происходит сбой, поскольку данный тип не является известным типом для сериализации.

Для решения этой проблемы можно добавить пользовательские типы в файл конфигурации, чтобы их можно было включить как известные типы в соответствующий контракт службы. Для этого необходимо однозначно определить пользовательский тип и контракты, то есть исходные интерфейсы СОМ, которые его используют.

В следующем примере показано, как с этой целью добавить два определенных пользовательских типа в раздел <userDefinedTypes> файла конфигурации.

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

При запуске службы среда выполнения интеграции выполняет поиск по указанным типам и добавляет их в коллекции известных типов для заданных контрактов.

См. также

Справочник

UserDefinedTypes
ComUdtElementCollection
ComUdtElement

Основные понятия

<comContracts>

Другие ресурсы

Integrating with COM+ Applications
How to: Configure COM+ Service Settings