C# Webserice 代理生成工具(WSDL)

    曾经做好几个项目,由于考虑不同的平台,所以基本上都是基于Webservice(SOAP协议)来实现,服务器一般是使用Java来实现。本文只要说明C#的Webservice代理的使用及代理代码的生成。

    由于项目算是比较大的,服务接口比较多,所以Webservice发布层都是有多个Url的,这种情况使用VS提供的WSDL生成工具好像就出现问题了,实体类代码和通信类(操作方法)代码都是放到一个文件里面了,如果Webservice发布时没有手动指定命名空间时,还会涉及到命名空间的问题,即实体类的属性完全相同,也会报命名空间的错误。所以在调用方,出现了同一实体,多处命名的问题。还有命名规范问题,如果发布方没有指定发布时的名称(如:实体中的属性,类名等),Java的Webservice发布工具默认是小写的,所以和C#通常为大写的做法不符,影响可读性。

    具体做法:把WSDL生成的代理类的有关的实体手动分离出来,并把每个实体类的有关的命名空间注释去。(如果是同一个团队开发,可以按照指定的要求一起遵守,但如果是不同公司,一般来说都是调用方自己想办法解决了),把所有实体类放到同一个程序集里(有很多相同的可以保留一份),这样,我们基本上可以做实体做了统一管理,基本上可以使整个程序运行正常了。

    维护成本:这些手动的工作的维护成本是相当大的,只要服务器每更改一次实体和操作方法(指要通过Webservice发布的方法),调用方必须得同步更新代理的代码,又得重新手动分离实体等,这种手动工作,往往带有很多隐性的错误,导致调试的时间增长,稳定度降低。

    为了解决以上问题,本人牺牲了个人的休息时间,基于WSDL.exe上写了一个C#代理生成工具《Webservice代理生成工具》,从生成到代码导出,不需要更改一点代码,特别是在项目开发的初期,带来的效率和速度是不可比拟的。

    本工具的功能有:

    代理类相关功能:

     1、可以对多个项目的Webservice代理生成进行管理;

     2、对同一个项目的生成代理的多个Uri进行管理,最近使用的排在最前面,可以保留最近50个Uri及用户对每个Uri所使用的配置选项;

     3、允许对代理进行重命名、指定代理的命名空间,更改代理的所指向的Url(此Url为运行时所要访问的地址,一般是在配置里,这里可以是配置实体的代码等。);

     4、允许增加代理所需要引入的分离的实体的命名空间或配置访问等所需要的命名空间等。

     5、生成的代理类类名首字母大写;

     6、指定代理的导出的文件路径。

     实体类相关功能:

     1、可以选择要分离出的实体;只要是根据 "class" 来判断,有部分代码会对delegate所需要相关的内容都生成一个class,所以该选项得人为去指定,但系统会记录每次用户的指定,再次生成时会自动加载前一次的指定;

     2、允许增加实体所需要的相关的命名空间;

     3、指定实体所在的命名空间;

     4、指定实体的类名前缀或后缀,如“Ety”等;

     5、允许对WSDL中定义的类进行首字母大写;

     6、允许对实体中的属性的首字母大写;

     7、注释实体序列化时使用的命名空间;

     8、时间的特别处理属性设置为真(该属性是WSDL.exe自动增加上去的,可能是为处理SOAP对不同时候格式的处理),如果不设置为真,调用方的时间字段是传送不到服务器端的。

     9、设置导出的实体类的路径(一个实体一个.cs文件);

     导出选项:

     1、选择需要导出的文件;

工具图片:

 

限制部分功能版下载:/Files/Yjianyong/WebServiceProxyBuilder.rar

需要无限制版请联系QQ:179781134 加友时在备注说明,否则拒绝!

本工具属个人版权,和公司没有任何关系。

posted @ 2012-02-25 14:18  Lance Yang  阅读(3223)  评论(1编辑  收藏  举报