首页 新闻 会员 周边

如何检测WEBService是否可用

0
悬赏园豆:100 [已解决问题] 解决于 2012-02-03 10:12

当前生产环境有两台服务器做主备服务器并部署WEBService,目前打算再增加一台当成代理服务器,所有调用端均通过代理服务器的WEBService来调用,代理服务器负责确定主服务器是否可用,若可用将接口调用转发到主服务器上,否则将接口调用转发到备用服务器上,从而实现主备切换,目前需要在代理服务器的WEBService中实现检察主备的WEBService 接口是否可用的功能(检测速度要快),目前苦无头绪,请问大家有什么好的解决办法吗?

blackrecord的主页 blackrecord | 初学一级 | 园豆:7
提问于:2011-11-25 15:54
< >
分享
最佳答案
0

如果不用组件,可以用下列方法:

     public bool IsWebServiceAvaiable(String url)
{
try
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
using(HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
{
return true;
}
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ProtocolError)
{
XXX.LogMessage(String.Format("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode));
XXXX.LogMessage(String.Format("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription));
}
}
catch (Exception e)
{
XXX.LogMessage(e.Message);
}
return false;
}
收获园豆:100
winzheng | 大侠五级 |园豆:8797 | 2011-11-26 14:42

能调用到具体接口吗?比方说我有个HelloWorld的接口

blackrecord | 园豆:7 (初学一级) | 2011-11-26 14:49

@blackrecord: 不需要,只要你正常的url地址就行。不用具体到方法。

http://.../TestService.asmx 
winzheng | 园豆:8797 (大侠五级) | 2011-11-28 22:48
其他回答(5)
1

代理服务器上定时检查主服务器是否可用,检查的方法可以简单地查看是否能访问,如下示例代码

///<summary> 
/// 判断webservice是否可用
///</summary>
///<returns> true:可用;false:不可用 </returns>
public bool getWSStatus()
{
string url = "http://.../service1.asmx ";
XMLHTTP http = new XMLHTTP();
try
{
  http.open( "GET ", url, false, null, null);
  http.send(null);
  int iStatus = http.status;
  //如果取得的网页状态不正确, 就是出问题了
  if(iStatus == 200)
    return true;
  }
  catch
  {   
  }
  return   false;
}
LCM | 园豆:6876 (大侠五级) | 2011-11-25 16:26

XMLHTTP 的命名空间?

支持(0) 反对(0) blackrecord | 园豆:7 (初学一级) | 2011-11-25 16:34

@blackrecord: 引入com组件: microsoft.xml  ,版本多少应该没关系吧,我引用的是3.0,然后在代码中using MSXML2;

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-11-25 17:17

这种方法不错

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2011-11-25 22:02

@LCM: 

这种可以检测到具体的接口吗?,可能WebService地址能访问,但具体的接口调用异常

支持(0) 反对(0) blackrecord | 园豆:7 (初学一级) | 2011-11-26 14:43

@blackrecord: 那你每个接口定时调用一下,看能不能访问了。

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2011-11-26 17:39
0

在.net中验证WebService的Url有效并且验证服务可用:
需要用到win32下的组件,比如Microsoft   XML,   v5.0
测试程序具体如下:建一个项目,在你的引用中添加COM---找到Microsoft   XML,   v5.0
然后using   MSXML2;
该组件提供一个接口MSXML2.XMLHTTP可以调用
XMLHTTP   http   =   new   XMLHTTP();//实例化
http.open( "GET ",   url,   false,   null,   null);
http.send(null);//打开url,向该url发送一个请求
http.status记下请求的结果状态
200表示请求成功,即该服务存在,返回其他数值在相应的服务器端有定义错误说明

wlz0815 | 园豆:587 (小虾三级) | 2011-11-25 16:31
0

你可以在你的webservice中写入一个方法来判断你的webservice是否好用,就是简单点返回一个值,

然后你可以通过一个方式去访问这个webservice 的那个检测的方法,看看是不是返回你想要的值,如果是,就代表可用,如果不是,就代表不可以用,你可以写个后台的服务,定时的去访问,去记录,然后,你的程序去访问是,先去访问测试服务的结果。就行了啊。

chenping2008 | 园豆:9836 (大侠五级) | 2011-11-28 16:20
0

你直接去调用你所谓的接口(比如:HellowWorld),能行不就是可以用么

John29 | 园豆:825 (小虾三级) | 2011-12-16 09:14
0

对于这种地址检测不了  http://1.1.1.1/aaa/ccc/

小尾的糊涂账 | 园豆:202 (菜鸟二级) | 2016-08-24 16:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册