<userDefinedType>
表示一个要包括到服务协定中的用户定义类型 (UDT)。
configuration
system.serviceModel
<comContracts>
<comContract>
<userDefinedTypes>
<userDefinedType>
语法
<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 元素集合。 |
备注
COM+ 集成运行时通过检查类型库来创建服务。 当 COM+ 组件包含传递 VARIANT 的方法时,系统将无法确定要在运行时之前传递的实际类型。 因此,当您试图在 VARIANT 内传递用户定义类型 (UDT) 时,将由于该类型不是可供序列化的已知类型而失败。
若要避免此问题,可以将 UDT 添加到配置文件,以使 UDT 作为已知类型包括到相应的服务协定中。 为此,必须唯一地标识 UDT 和协定(即使用它的原始 COM 接口)。
下面的示例演示如何将两个特定的 UDT 添加到配置文件的 <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>
在初始化服务时,集成运行库会查找指定的类型,然后将这些类型添加到指定协定的已知类型集合中。