1

我正在使用 Visual Studio 2012 为 WCF 服务自动生成代理类。在服务合同中,其中一种方法 ,GetActiveSessions()被定义为返回 a Dictionary<Guid, Session>,但这是该属性在我的代理类中的显示方式:

public MyNamespace.ArrayOfKeyValueOfguidSessionxjDRWaWoKeyValueOfguidSessionxjDRWaWo[] GetActiveSessions() {
    ....
}

还有另一个这种奇怪行为的实例,其中应该返回 a 的服务方法Guid被定义为string在我的代理类中返回 a 。虽然当我使用代理类定义的方法时,这些方法似乎按照指定的方式工作,但我不想ArrayOfKeyValueOfguidSessionxjDRWaWoKeyValueOfguidSessionxjDRWaWo在我的代码中使用类型的对象。

关于是什么导致这种奇怪行为的任何想法?

4

1 回答 1

1

这是预期的行为。代理序列化线路格式将匹配 WSDL/XSD 中定义的模式。然而,WSDL 中有许多匿名类型和数组没有名称,当您使用代理时,您需要为它们命名。因此,WCF 通过跨元素路径链接名称来计算唯一名称。如果您想要一个不同的名称,那么要么在代理之上创建一个包装器(并维护它),要么不在 WSDL 中使用匿名类型。

于 2013-08-14T15:04:42.410 回答