以下是WCF服务中的Method签名:
APIMessageList<APISimpleContact> GetMembers(string apiKey, APIContactSearchFilter filter);
APIMessageList
继承自IList
。一旦我为这个WCF服务构建了一个代理,类名就是 APIMessageListOfAPISimpleContactjHldnYZV 。
为什么我没有: APIMessageListOfAPISimpleContact ?
它将随机文本添加到界面中每个APIMessageList对象的末尾(有几个)它们都以相同的几个字符结尾 - jHldnYZV。我已经在网上寻找可能的原因,但我找不到任何有这个问题的帖子。
这是一个纯粹的化妆品问题,但这个界面暴露给我们的外部客户,所以它的外观很重要。
有人知道我为什么会遇到这个问题吗?
非常感谢 乔
答案 0 :(得分:7)
您的解决方案将在http://msdn.microsoft.com/en-us/library/ms731045.aspx。基本上,由于您可以拥有多个“SimpleContract”类(在不同的名称空间中),WCF将在合同名称的末尾添加消歧散列,这是您在合同名称末尾的8个字符中所拥有的。但您可以通过使用CollectionDataContract及其Name属性来控制它:
[CollectionDataContract(Name = "APIMessageListOfSimpleContract")]
public class APIMessageList : IList<SimpleContract> { ... }
答案 1 :(得分:0)
我们在使用Generic类型返回值时遇到了类似的问题。如果我们没有指定具体类型,则默认数据协定序列化程序或WCF序列化程序无法推断返回实体的确切类型。因此,它为返回的类型生成一个随机类名。
在我们的项目中,我们通过构建一个特定类型的数据契约来克服这个问题,并且作为WCF操作调用的结果返回相同的内容。
我的猜测是您使用的是泛型类型,并且序列化程序无法推断返回对象的类型。
我建议您创建一个数据传输对象(DTO)并从WCF服务返回该对象。这应该可以解决你的问题。