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

属性值

ComUdtElementCollection

用户定义类型 (UDT) 的集合。

属性

示例

下面的示例演示如何将两个特定的 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 字符串,指定已注册类型库中的特定 UDT 类型。

在初始化服务时,集成运行库会查找指定的类型,然后将这些类型添加到指定协定的已知类型集合中。

注解

COM+ 集成运行时通过检查类型库来创建服务。 当 COM+ 组件包含传递 VARIANT 的方法时,系统将无法确定要在运行时之前传递的实际类型。 因此,当您试图在 VARIANT 内传递用户定义类型 (UDT) 时,将由于该类型不是可供序列化的已知类型而失败。

若要避免此问题,可以将 UDT 添加到配置文件,以使 UDT 作为已知类型包括到相应的服务协定中。 为此,必须唯一地标识 UDT 和协定(即使用它的原始 COM 接口)。

适用于