博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把wcf服务,改成restful方式,以及吐槽
阅读量:7211 次
发布时间:2019-06-29

本文共 1093 字,大约阅读时间需要 3 分钟。

昨天java的同事,和我说,在java调用.net的wcf服务时,生成代理类会占用大量内存,最好改成restful形式。

但是我们的wcf被自己的.net程序各种调用。在不更改.net调用方式的前提下,提供restful方式的调用

经过一些尝试,修改步骤如下

1、在wcf的接口里,每个方法加上[WebGet]

2、写一个新的服务,继承原来的服务,这个新服务的地址和原来不一样了,所以不影响以前服务的调用

3、编辑svc文件,加上Factory="System.ServiceModel.Activation.WebServiceHostFactory"

 

然后就开始各种报错了

首先是简单地问题

当方法里包含out参数时,需要[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped)]才能正确解析

稍微麻烦一点的问题,当方法里含有T[],IEnumerable<T>,Nullable<T> 这些类型的参数时,微软没有提供自动从url的querystring里把string类型的字符转成这些类型的方法。

需要自定义,参考

写attribute加到新的服务类上,参考

处理了这些步骤,理论上就可以正常访问了。

 

下面是吐槽

我们的项目是之前用vs2010,.net 4.0开发的。后来我把vs升级到了2012,用了一段时间发现2012的编译好像有点问题(也许是有什么我不了解的东西)

按照上面的方法,我已经搞好一个wcf的restful了,各种参数都运行良好,然后搞另一个wcf,报错说不支持Nullable,然后各种调试无果,把不支持的那个方法改了名字,通过了。

然后搞第三个wcf,报不支持IEnumerable,果断改名,又通过了。谁能告诉我这是什么原理,难道我机器上乱七八糟东西装的太多,还有兼容性问题?

 

之前还遇到过更诡异的问题,同样的代码,没改过,vs2012 debug,正常,vs2010 debug release正常,vs2012 release编译过了,运行报错。

因为是release,也没法跟踪,我想看看是否有inner exception,于是try catch,throw inner,release编译,然后他就不报错啦。

通过遇到的几次这种见鬼问题,我感觉vs2012的编译器在某些情况下生成出来的dll会有问题。改变一些代码(注释和格式无效),达到同样的目的,可能他就好了。

转载于:https://www.cnblogs.com/czcz1024/archive/2013/05/29/3106378.html

你可能感兴趣的文章
MySQL数据库基本操作
查看>>
我写的oracleRAC状态监控脚本(在单位一直使用,比较稳定)
查看>>
**PHP中替换换行符
查看>>
更改数据库的兼容模式
查看>>
确保帐户安全 谈MySQL数据库安全解决方案
查看>>
MySQL修改root密码的多种方法
查看>>
Kali 系统 apt-get update更新失败解决方案
查看>>
用nginx TCP反向代理作mail邮件代理
查看>>
zabbix中文配置指南
查看>>
Windows系统下,使用Emacs+Putty操作远程机器
查看>>
ORA-00600:[kclchkinteg_2]及[kjmsm_epc]内部错误一例
查看>>
【Linux】基础每日一命之cut&mv&scp命令
查看>>
浪擎全融合灾备云获大数据安全领域最佳创新奖
查看>>
建议重写equals方法时也一并重写hashCode方法
查看>>
根据post请求调取app接口,map对象转字符串,json对象转字符串
查看>>
jenkins添加linux作为slave
查看>>
nginx学习(一):基本安装
查看>>
Oracle Enterprise Manager 11g 启停
查看>>
RabbitMQ详解(一)
查看>>
基于DNS实现智能化访问网站
查看>>