问个关于WCF传递泛型集合的问题
我有个泛型集合
[KnownType(typeof(Brand))]
[CollectionDataContract]
[Serializable]
public class PageOfItems<T> : List<T>
{
public PageOfItems()
{ }
}
调用方法是
[OperationContract]
[ServiceKnownType(typeof(Brand))]
PageOfItems<Brand> GetBrands(PagingInfo pagingInfo);
在客户端引用这个服务后,返回的对象却是这个
JShop.PageOfItemsOfBrand7rzGfijk
而正确的应该是
JShop.PageOfItems<Brand>
请问这个怎么解决呢?
--------------------编程问答-------------------- WCF啊... 目前没深入了解,飘过 --------------------编程问答-------------------- 没人吗? --------------------编程问答-------------------- 楼主的结贴率。。。 --------------------编程问答-------------------- 谁帮下啊,给份的啊 --------------------编程问答-------------------- JShop.PageOfItemsOfBrand7rzGfijk?
它不会返回不存在的类,你有这样的类吗? --------------------编程问答--------------------
没有,这个是引用后,VS自动生成的,但这个是错误的,我想要的是
JShop.PageOfItems<Brand> --------------------编程问答-------------------- [CollectionDataContract]
换成
[DataContract]
试试
[OperationContract]
[ServiceKnownType(typeof(Brand))]
PageOfItems<Brand> GetBrands(PagingInfo pagingInfo);
去掉
[ServiceKnownType(typeof(Brand))]
契约Contract
加
[ServiceContract] --------------------编程问答-------------------- 楼上的在胡说八道,什么地方用什么属性都没搞清楚,就在那里瞎指挥,[ServiceContract]只能用在接口或类的属性上,你怎么可以加在函数上
既然楼主说“在客户端引用这个服务后,返回的对象”错误,那么你手动修改下产生的cs文件,将那个对象修改正确试试看,应该可以使用的。我以前也使用引用服务的方法添加过客户端,发现List<T>这类泛型到了客户端,会自动修改接收到的类型的,不再是List<T>对象了,虽然也可以用,但看着不爽我就手动修改了客户端自动产生的CS文件,改回了List<T>对象,使用也没问题。所以你试试手动改下,应该是可以的。
嘛,现在为了稳定和减少麻烦,我单独将公共类放在一个项目中编译为dll同时给WCF服务端和客户端引用,这样就不需要在客户端引用服务了,直接引用dll即可,永远不可能出错。 --------------------编程问答--------------------
try --------------------编程问答--------------------
是这样的,要手动修改。
也可以自己写客户端的代码 方法名可以不同只要在服务端和客户端同时定一个相同的name属性
--------------------编程问答--------------------
眼睛看清楚咯。。。
契约Contract
加
[ServiceContract]
契约指的是用接口来定义服务契约(Service Contract)
你哪只眼睛看见我说把ServiceContract加方法上? --------------------编程问答--------------------
自动生成的是服务端代理。
我没使用过.NET的服务器引用,一般都是使用Svcutil手动生成代理。服务器端使用List<T>的时候,生成工具会自动转换为 T[] 数组类型。一般手动修改代理就好了。。。
LZ手动修改代理试试。
补充:.NET技术 , C#