wcf返回List的问题

truecoffeefox 2011-06-03 09:21:40
问题接续自这个帖子

http://topic.csdn.net/u/20110531/13/e5eb9481-9d58-4e81-88cf-723a312baf0d.html

现在jquery调用返回poco这样比较简单的list<t>是可以了
但是如果T的结构稍微复杂点,比如有个联合主键或者list成员,比如上贴中说的newskind类就不成了

firefug错误状态为aborted,fiddler则是ReadResponse() failed: The server did not return a response for this request.

看了这篇文章意思似乎是fiddler的504错误并不是程序返回的而是因为fiddler自身返回的

同时,如果通过代码来调用
IApplicationContext ac = ConfigurationManager.GetSection("spring/context") as IApplicationContext;
CMS.Service.Contract.IPrivateCmsServiceContract pms = ac["PrivateCmsService"] as CMS.Service.Impl.PrivateCmsService;
pms.GetNewsKindByApp();
返回的结果是正确的,看来问题处在jq调用或者wcf的配置上

不知道该如何处理啊~~~~~~~~~


...全文
881 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
truecoffeefox 2011-06-03
  • 打赏
  • 举报
回复
消息未记录。
异常: System.ServiceModel.CommunicationException: 尝试对参数 http://tempuri.org/ 进行序列化时出错: GetNewsKindByAppResult。InnerException 消息是“不应为数据协定名称为“AppProxy:http://schemas.datacontract.org/2004/07/Castle.Proxies”的类型“Castle.Proxies.AppProxy”。请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。”。有关详细信息,请参见 InnerException。 ---> System.Runtime.Serialization.SerializationException: 不应为数据协定名称为“AppProxy:http://schemas.datacontract.org/2004/07/Castle.Proxies”的类型“Castle.Proxies.AppProxy”。请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。
cjh200102 2011-06-03
  • 打赏
  • 举报
回复
确实不错
truecoffeefox 2011-06-03
  • 打赏
  • 举报
回复
很多例子都是不用重写tostring而自动序列化输出了
不知道咋回事这个,spring.net nhibernate wcf结合的例子真是忒少了
ZhuZhuYuXiang 2011-06-03
  • 打赏
  • 举报
回复

public class BaseVars
{
public BaseVars()
{
ListString = new List<string>();
ListInt = new List<int>();
ListBool = new List<bool>();
ListByte = new List<byte>();
ListFloat = new List<float>();
ListDouble = new List<double>();
}
public List<string> ListString { get; set; }
public List<int> ListInt { get; set; }
public List<bool> ListBool { get; set; }
public List<byte> ListByte { get; set; }
public List<float> ListFloat { get; set; }
public List<double> ListDouble { get; set; }
}

truecoffeefox 2011-06-03
  • 打赏
  • 举报
回复
唉,有什么好的资料推荐么,网上的都是人云亦云……
flyerwing 2011-06-03
  • 打赏
  • 举报
回复
对象序列化,然后转成可传递的字符串然后乱发
truecoffeefox 2011-06-03
  • 打赏
  • 举报
回复
忘了还有一个重点,似乎需要重写tostring方法,否则得到的只是个类型字符串
子夜__ 2011-06-03
  • 打赏
  • 举报
回复
机器人的WCF很猛。
truecoffeefox 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 flyerwing 的回复:]

把对象搞成字符串传过来再转成原来的对象
不知道成不成了.
[/Quote]
这个也考虑过,但是这个service使用情况比较杂乱,n多的应用需要调用它

刚才自己解决了

具体如下

首先,504错误并不是fiddler返回的

第二,之所以会504,因为我的newskind类继承自StatusChange类,然后通过clr扩展方法向其添加了几个方法,newskind有Serializable声明,但这个StatusChange我忘记添加Serializable声明了,这样newskind无法从StatusChange继承。这个问题很恶心,出错就出错吧,至少给个异常或者提示什么的,它不,只是默默的写到系统日志里,也怨我忘了日志这么好用的东东了……

第三,给StatusChange加上声明还是出错,为什么呢,因为newskind没有DataContract声明,因而导致序列化时出错,同样,这个也不报异常,也是往日志里写

最后反观这个问题,还是因为基础不扎实,刚刚接触wcf还不是很了解它便贸然下手,结果这么个小问题耽误了一天多时间……算是点教训吧。

呵呵,问题解决了,就来接分吧,晚上下班前结贴,先到先得

小童 2011-06-03
  • 打赏
  • 举报
回复
以前刚学sl的时候,这个wcf就比较难搞,
flyerwing 2011-06-03
  • 打赏
  • 举报
回复
把对象搞成字符串传过来再转成原来的对象
不知道成不成了.
失去乐山贼 2011-06-03
  • 打赏
  • 举报
回复
我也正在学WCF,坐等答案。

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧