自动生成的代理类与服务合同不匹配

时间:2013-08-14 14:56:35

标签: c# wcf web-services proxy-classes

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

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

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

关于导致这种奇怪行为的原因的任何想法?

1 个答案:

答案 0 :(得分:1)

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