我正在使用Visual Studio 2012自动为WCF服务生成代理类。在服务合同中,其中一个方法GetActiveSessions()
被定义为返回Dictionary<Guid, Session>
,但这里是属性在我的代理类中的显示方式:
public MyNamespace.ArrayOfKeyValueOfguidSessionxjDRWaWoKeyValueOfguidSessionxjDRWaWo[] GetActiveSessions() {
....
}
还有另一个这种奇怪行为的例子,其中一个应该返回Guid
的服务方法被定义为在我的代理类中返回string
。虽然这些方法在使用代理类定义的方法时似乎按照指定的方式工作,但我不想在代码中使用ArrayOfKeyValueOfguidSessionxjDRWaWoKeyValueOfguidSessionxjDRWaWo
类型的对象。
关于导致这种奇怪行为的原因的任何想法?
答案 0 :(得分:1)
这是预期的行为。代理序列化有线格式将匹配WSDL / XSD中定义的方案。但是,WSDL中有许多没有名称的匿名类型和数组,当您使用代理时,您需要为它们命名。因此,WCF通过在元素路径中链接名称来计算唯一名称。如果你想要一个不同的名字,那么要么在代理上创建一个包装器(并保持它),要么不要在WSDL中使用匿名类型。