<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
Основные понятия
Другие ресурсы
Integrating with COM+ Applications
How to: Configure COM+ Service Settings