当使用WCF + Entity Framework时要小心,否则,很容易掉入各种陷阱。这里介绍两个在序列化时容易遇到的、会导致服务停止的陷阱。
一、试图序列化Entity Proxy类而导致服务停止。
二、序列化时出现死循环导致服务停止;
无论掉入哪一个陷阱,在客户端都会看到这样的对话框(点击看大图):
呃~这个图才对:
大致意思是会说:服务不在线或者客户端配置有问题或者Proxy类有问题。而如果跟着Error Details里的第一行Google,会找到许多文章关于调整数据缓存大小、调整操作超时时间……如果按照常规则调试方法——按图索骥找问题,那么就可能越陷越深。
查找问题时,首先要透过假象,看到问题的本质——WCF服务因为某些原因而停止了。其次,我们要具体分析问题的特殊性,结合经验,来查找问题。
服务停止有一个典型的原因,那就是序列化出问题了。由于在WCF中,序列化不需要我们写代码实现,它在为我们提供便利的同时,也埋下了伏笔。而EF的使用,又进一步将事情变得错综复杂。凡事有弊有利,往往是使用了EF这样的特殊性,让我们查找问题时也更具方向性。
EF中,有什么特性会与WCF交互?没错,我们常常把EF的实体类用作DataContract。EF的实体类,无论是生成的还是通过Code First写的,运行时,为了支持EF的一些“高级”功能,例如,LazyLoad,Runtime会从你的Entity类自动继承出一个对应的代理类(Proxy Types)并对代理类对象进行操作。例如Person类,在运行时或者就会对应有一个叫Person123456类(肯定不会叫这个名字啦,这权当标识一下)。我们写代码时对Person的操作,运行时会换成对Person123456的操作。
http://www.zhiyin.cn/yx/bxdx/5259392.html |
http://www.zhiyin.cn/yx/bxdx/5259319.html |
http://www.js0573.com/yx/lwbj/6558448.html |
http://www.zhiyin.cn/yx/hdtp/5259368.html |
http://www.zhiyin.cn/yx/hdtp/5259647.html |
http://www.zhiyin.cn/yx/hdtp/5259471.html |
http://www.zhiyin.cn/yx/hdtp/5259729.html |
http://www.zhiyin.cn/yx/hdtp/5259332.html |
http://www.zhiyin.cn/yx/hdtp/5259449.html |
http://www.zhiyin.cn/yx/hdtp/5259445.html |
http://www.zhiyin.cn/yx/hdtp/5259416.html |
http://www.zhiyin.cn/yx/hdtp/5259415.html |
http://www.js0573.com/yx/sjbm/6558665.html |
http://www.js0573.com/yx/sjbm/6558734.html |
http://www.js0573.com/yx/sjbm/6558540.html |
http://www.js0573.com/yx/sjbm/6558672.html |
http://www.js0573.com/yx/jsfs/6558575.html |
http://www.js0573.com/yx/jsfs/6558545.html |
http://www.js0573.com/yx/jsfs/6558508.html |
http://www.js0573.com/yx/jsfs/6558459.html |