Sb7:关于.net使用WCF过程中遇到的坑

发布时间 2023-11-27 09:49:21作者: 晨耕暮饮

最近写了一个类似QQ升级的功能。使用wcf编写了一个服务端。

 做了四个接口服务,可以根据软件编号查询所有版本号,可以根据版本查询所有待升级文件,远程获取升级文件。

在做服务的时候原计划GetFile方法中采用异步同时传输,将大文件切割成多个模块进行传输,在客户端接收完后重新组包再生成文件。但是出现了一个问题,exe文件如果过大,切割后再客户端接收到生成原来的exe文件打不开【麻烦大佬能给我一个完美的解答】。很难受,没找到原因,对于其他文件,例如word文件,切割后,在客户端接收重新组包可以还原原来的文件。后面只能将单帧传输文件大小放大,好在wcf生成时默认单帧大小可以达到2147483647字节,所以一般文件传输都没有问题。

好了,上面的服务端实际很简单,①在本地创建了一个存储升级文件信息的sqlit数据库;②创建wcf服务,将升级需要的业务全部写好。③在自己需要升级服务的软件中编写wcf客户端。

PS.此处客户端升级程序模仿了GeneralUpdate【https://www.cnblogs.com/justzhuzhu/category/2130923.html

 此处我们新建了一个upgrade程序(独立执行,方便升级client),在client中判断当前是否需要升级,如果需要升级,那么将upgrade启动起来,同时将client关闭。

好了,这里我要开始说坑了

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《

我们在编写wcf客户端的时候考虑到client中需要使用同时upgrade中也需要使用,所以这里我干了一件傻事,我将wcf客户端封装成了动态库

 wcfClient中我引用了wcf服务,同时将所有接口都封装在了VersionValidate类中,

 wcfClient中的app.config会随着添加wcf服务自动添加了system.serviceModel节点【坑点就在这里,由于你通过引用wcf服务,系统会自动添加这些节点】,这个节点是连接wcf服务关键的节点。

我新建了一个类似“upgrade”程序的“UpLoadExe”程序。这个程序引用了wcfclient,本以为就这样可以连接wcf服务了,结果死活都连不上。

后面查了很久,发现我在debug中,app.config缺少上面的 system.serviceModel节点,一下就懂了,原来我们在引用类库的时候,类库中的配置文件并没有添加到我们的uploadexe的配置文件中,添加上后就可以连接了。