一些Web Service的经验

使用Web服务也有半年多了,虽然时间不长,但还是遇到了不少难题,在这里把我的一些经验拿出来给大家共同分享。

刚开始做Web服务的时候还觉得很轻松,感觉就跟写一般的组件没什么区别,而使用时跟引用普通的程序集一样的简单,这是因为Visual Studio替我们完成了许多不必要的繁琐的工作。虽然如此,但是很容易造成我们的过分依赖,而忽略了Web服务发布和消费的内部工作机制。但随着开发的深入,越来越多的问题摆到了我的面前,大概有以下几个:

1.  动态url地址的配置

在消费Web服务时,最初都是直接引用静态Url地址,后来发现当Web服务生产方的地址有所变化时,我的客户端消费程序(此程序也可能是消费Web服务的Web应用程序服务端)必须要重新更新Web服务,这样就会增大程序部署的难度。为了使消费程序更加灵活,于是我就在web.config中加入了一段appSettings的配置信息,将需要修改的Url放入此段配置中,然后打开在asp.net1.1工程中引用最初的静态Web服务地址时自动生成的代理类文件(通常是/Web References/’web服务名’/Reference.cs),将this.URL属性修改为从配置文件中读取刚配好的Url信息,如:

web.config :

<appSettings><add key="URL_AccountVerifyForWebservice" value="http://eai.ibss:9001/VerifyWebService//xxx.jws"/></appSettings>

Reference.cs :

public class AccountVerifyForWebservice : System.Web.Services.Protocols.SoapHttpClientProtocol {public AccountVerifyForWebservice() {this.Url = ConfigurationSettings.AppSettings["URL_AccountVerifyForWebservice"];}.}

这样就降低了部署难度,因为在Web服务地址改变后,你不需要在开发环境中更新消费程序然后再重新部署到客户端,而只需修改客户端的web.config文件内容就可以了,你甚至还可以自己配置一个xml文件来列举所有可能的url地址,然后在代理类中枚举这些地址列表即可。

 

2.  DNS解析问题

在一个项目中与Weblogic打交道,需要我的aspnet应用程序消费对方提供的web服务,虽然我很顺利的完成了Web引用,即通过disco发现了Web服务,自动下载了wsdl文件,并生成了代理类文件,也正常通过了编译,但是在运行时一旦开始invoke此web服务就会报错,仔细检查了代理类一切正常,很纳闷搞不懂为什么。后来有同事告诉我可能是DNS的原因,我这才知道Web服务的生产环境上建立了负载平衡,而其提供的DNS服务器负责将http://eai.ibss:9001/VerifyWebService/.../xxx .jws这样的以域名地址动态的解析到所有提供Web服务的负载平衡服务器上,部署环境中的机器都可以通过此DNS访问web服务。一开始,服务发布方提供给我的只是其中一台固定Web服务器的静态ip地址(如http://192.168.0.1:9001/VerifyWebService/.../xxx .jws),而wsdl文档中描述的soap调用地址是域名地址,引用时自动生成的代理类的Url属性自然就是域名地址了,而我的开发环境不能够访问DNS服务器,也就不能解析域名地址,所以在运行时会抱错,因为soap信息根本就没有发送到正确的Web服务器上去。这种开发,生产和部署环境的不同有时是非常令人头痛的~~

后来通过采用第一个问题中介绍的配置文件的解决方案就很有效地解决了目前这个问题,开发调试时使用静态地址,部署时更换为域名地址即可。

 

3.  Web服务和Web应用程序的分离

最好不要在同一台生产服务器上同时部署web服务和消费此web服务的web应用程序,这样会造成不必要的性能瓶颈。当客户端请求一个web应用程序的某个页面时,服务器将占用一个http连接,同时当该页的生成或某个事件被触发时需要同步调用一个web服务,那么此时该服务器将增加一个http连接的占用,也就是说用户请求一次页面有可能会在服务器上同时造成两个http连接,若服务器本身的http连接数为1000个的话那么可能的实际用户连接数只有500个。

 

4.  避免使用非string型数据

尽量避免在Web服务中使用非string型的数据作为Web方法的参数或返回值,因为Java或者别的消费客户端可能并不能够正常解析int或arraylist这样的数据类型,而string型几乎是最通用的数据类型,至少与java能够正常交互。尽量不要提供DataSet这样的复杂数据类型,尽管网上已有许多解决方案,但我感觉都挺麻烦的,还不如将DataSet直接输出到一个二维string型数组中。

转载于:https://www.cnblogs.com/zengsong-restService/archive/2013/01/04/2843725.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归1

此次做项目使用JDBC&#xff0c;遇到了一个树形结构&#xff0c;采用递归查找父类&#xff0c;有了一个初步的认识。 public Channel findParent(int id){ if (id0) { return null; }else { int parent 1; Channel cnew Chan…

ssh 脚本 空格字符转换

yum install -y doc2unix && doc2unix *.sh

⑨④-如果不发展就可能面临生存窘境

⑨④-如果不发展就可能面临生存窘境 老男孩语录⑨④-如果不发展就可能面临生存窘境 现实很残酷&#xff0c;如果你不去思考如何发展自己&#xff0c;就可能面临生存的窘境&#xff01; 上面这句话不光适合某一个个体人类&#xff0c;小到一个家庭&#xff0c;一个公司&#xff…

探究make_shared效率

Why Make_shared ? C11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::shared_ptr 的构造函数相比它能给我们带来什么好处呢 ? 优点 效率更高 shared_ptr 需要维护引用计数的信息, 强引用, 用来记录当前…

vs2012里用easyUI,显示不正常

vs2012里用easyUI&#xff0c;显示不正常&#xff0c;什么时候可以解决转载于:https://www.cnblogs.com/zhangxj/archive/2013/01/05/2846235.html

asp.net实现ftp上传代码(解决大文件上传问题)

原来使用asp.net上传控件上传 那个虽然简单但是页面不是很友好 然后就用了uploadify上传控件 这个控件虽然界面友好 但是大文件还是不能上传 而且在不同的浏览器会出现session丢失问题 所以我到了个ftp上传的方法 以下是具体代码 View Code?11 using System; 2 using System…

关于豆瓣电台收费的思考

大家讨论的热火朝天啊大家的问题&#xff1a;电台的盈利模型是不是只有广告我觉得电台的盈利只靠广告是不行的&#xff0c;所谓电台就是主要是多播和广播&#xff0c;是相对传统电台来的。传统电台涉及硬件成本低。广告可以&#xff0c;互联网电台依靠广告盈利&#xff0c;除非…

做自己的伯乐

读很多古代大家的故事&#xff0c;就发现贾谊、苏轼、李白等人生不逢时&#xff0c;怀才不遇&#xff0c;不被帝王将相所识并所用&#xff0c;实现自己的政治抱负。笔者细观周围好多朋友和同事&#xff0c;在一起聚会时&#xff0c;常常也发出类似的慨叹&#xff0c;刨去当前企…

MVC Layout布局系统

原文&#xff1a;http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html Layout页:该家伙其实就相当于原来的Master文件. Partial页:相当于原来的UserControl View页: View Page with Layout:等同于原来的View Content Page.它的功能只是为了实现原来在…

tolua++

一.tolua简介tolua是一种第三方的软件包,可以为Lua提供面向对象的特性,这样我们就可以使用Lua来编写使用C语言库的脚本文件.二.tolua的编译. tolua的主页在http://www.codenix.com/~tolua/,目前的最新版本是1.0.7,为了使用tolua,我们需要三个文件: 1.bin/tolua[.exe…

IE6PNG8PNG24test

2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"&…

Java线程(七):锁对象Lock-同步问题更完美的处理方式 .

Lock是java.util.concurrent.locks包下的接口&#xff0c;Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作&#xff0c;它能以更优雅的方式处理线程同步问题&#xff0c;我们拿Java线程(二)中的一个例子简单的实现一下和sychronized一样的效果&#xff…

ipconfig命令指南

ipconfig /all 显示本机TCP/IP配置的详细信息 ipconfig /relase DHCP客户端手动释放IP地址 ipconfig /renew DHCP客户端向服务器刷新请求&#xff08;具有更新的作用&#xff09; ipconfig /flushdns 清除本地的DNS缓存内容 ipconfig /regesterdns dns客户端手工向服务器注册 i…

linux --常用命令

一、文件操作 1.创建文件夹 mkdir /var/www/test 2.复制文件 cp file1 file2 复制文件file1.php 的内容到文件file2中。 3.cp -b file1.php file2.php 备份file1.php并重命名为file2.php 4.复制文件夹和子文件夹: cp -R scripts scripts1 从 scripts 复制文件夹和子文件…

调整 Windows系统参数网址

https://www.ibm.com/docs/zh/was-nd/9.0.5?topicsystems-tuning-windows

多路复用与设置阻塞、非阻塞模式

多路复用与设置阻塞、非阻塞模式 - To be, or not to be: that is the question - 博客频道 - CSDN.NET多路复用与设置阻塞、非阻塞模式 分类&#xff1a; Linux/Unix C/C Network Program 2009-10-06 20:30 202人阅读 评论(0) 收藏 举报阻塞和非阻塞模式使用fcntl()可以进行设…

c++指定枚举占一个字节

//这样的写法,指定这个枚举占1字节 enum class watch_state : uint8_t { initialized, listening, pending_close, };

openssl 1.1.1编译语句

Perl Configure VC-WIN64A no-asm --openssldir"D:\openssl_lib" perl Configure VC-WIN32 no-asm --openssldir"D:\openssl_lib"

开发 Windows 8 Bing地图应用(2)

下面是对使用JavaScript的Bing Maps Trip Optimizer示例的介绍&#xff0c;讲述应用的JavaScript部分组织形式&#xff0c;本地的上下文和网络上下文之间的通信。 WinRT需要访问网络的代码&#xff0c;下面是一些需要访问网络的活动示例。 q 加载一个外部JavaScript文件&#x…

http协议知识msdn

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Protocol_upgrade_mechanism