EntityFramework5.0与WCF使用遇到的问题

在使用EntityFramework5.0,并将其作为WCF放在服务端的时候遇到了如下问题:

1. EF在客户端与服务端之间传输问题

由于将EF放在服务端,所以类必须具有DataContract属性。

服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。

只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递。WCF对声明为DataContract的类型提供更加细节的控制,可以把一个成员排除在序列化范围以外,也就是说,客户端程序不会获得被排除在外的成员的任何信息,包括定义和数据。默认情况下,所有的成员属性都被排除在外,因此需要把每一个要传送的成员声明为DataMember,如下所示。


WCF报错System.BadImageFormatException的解决方案

在一个WCF Service Library中,如果引用了一些32bit的dll,我们称这个WCF Service Library依赖于x86。在调试过程中,也必须将其工程编译属性调整为x86。但如果我们的编译环境是64位,运行可能就会报错BadImageFormatException:

这是因为WCF Service Library是一个dll,必须放在容器中执行,在vs调试中使用了WcfSvcHost.exe来作为一个临时容器。它位于vs安装目录下的Common7\IDE\WcfSvcHost.exe。由于系统环境是64位,所以安装vs的时候就会自动设置WcfSvcHost.exe为64位,所以当WcfSvcHost.exe运行32位dll时才会报错。解决这个问题可以使用Corflags命令.

corflags命令的详细介绍可以参考这里。它可以将程序设置在32位下工作:

操作步骤:


WCF基础知识与实例

一、 WCF是什么?

Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。

二、 WCF是用来做什么的?

WCF就是用来通信的。它集合了多种平台,多种协议,多种方式收发客户和服务之间的消息。

例子:我们在windows下玩网络游戏,每一个操作都会通过网络传给服务器,服务器可能是windows也可能是Unix,它接收到这个操作命令,处理后反馈给我们。接收,处理,反馈,这中间的部分就是WCF的用途。