WCF之剑走偏锋-建立无配置文件的WCF项目
之前只接触过Webservice和Remoting。老师讲WCF的时候也没有去听,因为是额外添加的课程。但是后来听说WCF是多么的强大,就想着在一个新项目里使用这种技术。按照Remoting的思路。建立一个普通的接口层,代码如下:
代码
namespace Middle
{
[ServiceContract]
public interface IProds
{
//保存数据
[OperationContract]
bool SaveDatas(Prods pds);
//修改数据
[OperationContract]
bool EditDatas(List<Prods> list);
//删除数据
[OperationContract]
bool DelDatas(object id);
//删除批量数据
[OperationContract]
bool DelAllDatas(ArrayList list);
}
}
然后在服务端的一个类里分别实现了这些方法,接下来把WCF的服务放在了一个winform窗体里:
代码
ServiceHost datashost = new ServiceHost(typeof(DatasRealize));NetTcpBinding tcp = new NetTcpBinding();tcp.PortSharingEnabled = true;datashost.AddServiceEndpoint(typeof(IDatas),tcp, "net.tcp://localhost:" + postid + "/datas");datashost.Open();
最后在客户端里调用:
ChannelFactory<IDatas> chan=new ChannelFactory<IDatas>(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:9090/datas"));
//获得接口对象
IDatas ida=chan.CreateChannel();
//实现逻辑
整个项目运行正常,但是到了收到老师给的资料,发现这种做法貌似不正确,完全不符合WCF的建立规则。
于是改由正规方法,先建立一个WCF服务库,将接口的实现仍然放在服务端,按提示修改配置文件中相应地方。
但是调试的时候郁闷,首先弹出目标程序集不包含服务类型的错误提示。然后会出现WCF已经托管的托盘提示。
再过了1、2分钟,程序才开始调试。虽然结果是一摸一样,但我就纳闷了,
怎么正统的方法还不如我的瞎整来的速度呢?2者最大的区别我觉得是前者完全舍弃了配置文件。
不明白在建立正常WCF时还显著提示需要更改配置文件是为那般?
不使用配置文件的还有个可以偷懒的地方就是实体类中只需要在类前面标明[Serializable],
不需要额外的声明契[DataMember]