自动生成的代理类与服务协定不匹配



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

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

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

你知道是什么导致了这种奇怪的行为吗?

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

相关内容

最新更新