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


ComContractElement.UserDefinedTypes Свойство

Определение

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

public:
 property System::ServiceModel::Configuration::ComUdtElementCollection ^ UserDefinedTypes { System::ServiceModel::Configuration::ComUdtElementCollection ^ get(); };
[System.Configuration.ConfigurationProperty("userDefinedTypes")]
public System.ServiceModel.Configuration.ComUdtElementCollection UserDefinedTypes { get; }
[<System.Configuration.ConfigurationProperty("userDefinedTypes")>]
member this.UserDefinedTypes : System.ServiceModel.Configuration.ComUdtElementCollection
Public ReadOnly Property UserDefinedTypes As ComUdtElementCollection

Значение свойства

Коллекция определенных пользователем типов (UDT).

Атрибуты

Примеры

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

<comContracts>
  <comContract contract="{5163B1E7-F0CF-4B6A-9A02-4AB654F34284}"
   namespace="http://tempuri.org/5163B1E7-F0CF-4B6A-9A02-4AB654F34284"
   name="_Broker" requiresSession="true">
    <userDefinedTypes>
      <userDefinedType name="CustomerType"
         typeLibID="{91DC728C-4F1A-45de-A9B6-B538E209CEA6}"
         typeLibVersion="1.0"
         typeDefID="{D129765C-F211-434e-825A-9A63198C41F2}" />          
      <userDefinedType name="AddressType"
         typeLibID="{91DC728C-4F1A-45de-A9B6-B538E209CEA6}"
         typeLibVersion="1.0"
         typeDefID="{4616AE0D-687A-43B7-BC63-141AE3DFD099}" />          
    </userDefinedTypes>
    <exposedMethods>
      <add exposedMethod ="BuyStock" />
      <add exposedMethod ="SellStock" />
      <add exposedMethod ="ExecuteTransaction" />
    </exposedMethods>
  </comContract>
</comContracts>

Атрибуты <userDefinedType> элемента определяются следующим образом:

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

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

  • typeLibVersion: строка, в которой указывается версия библиотеки типов, в которой задан тип.

  • typeDefID: строка идентификатора GUID, в которой указывается пользовательский тип в зарегистрированной библиотеке типов.

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

Комментарии

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

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

Применяется к