如何设置soapclient 超时通信超时

打酱油震惊呵呵赞鄙视标签: ,,注:与内容无关的评论将被删除,严重者禁用帐号! | 最新评论不吐不快,赶紧来一发!栏目推荐关注 第一PHP社区 微信公众号热门点击本站推荐
| 中国最专业的PHP中文社区 |
Copyright (C) 1998 - . All Rights Reserved
第一PHP社区
版权所有 快云为本站提供专业云计算服务 &&&&&&&&&&&&&&&&&&&&&&&
posts - 11,comments - 8,trackbacks - 0
Winform客户端调用Webservice 120秒超时.对此问题,针对服务器与客户端分别作了超时设置为300S.
1. 服务器端设置超时 在 web.config 的 system.web 里添加如下配置项: & httpRuntime executionTimeout="300000" /&记得要把 web.config 的 debug 模式关闭: & compilation
defaultLanguage="c#" debug="false" /& 2. 客户端设置超时 在 WebService 的客户端代理程序(用 wsdl.exe 生成)里设置 Request 超时时间, 单位是毫秒: protected override WebRequest GetWebRequest(Uri uri) { HttpWebRequest wr = (HttpWebRequest)base.GetWebRequest( uri ); wr.Timeout = 300*1000; }
但还是会出现120S超时.
此问题可以得出以下结论:
&&&&&&&&&&&&&& 1:可能是服务器的问题 &&&&&&&&&&&&&& 2:可能是客户端.net环境配置的问题 &&&&&&&&&&&&&& 3:可能是网域的问题 &&&&&&&&&&&&&& 4:可能是网路的问题
对此.分别作如下测试: &&&&&&&&&&&&&& 1:更换客户端电脑.测试有些电脑出现超时,有些电脑不会超时.可以肯定.服务器是没有问题 &&&&&&&&&&&&&& 2:分别查看几台客户端电脑配置,以没有发现问题. &&&&&&&&&&&&&& 3:在同一个网域里面,有的电脑不会超时,有些电脑超时.所以,可以排除网域问题. &&&&&&&&&&&&&& 4:对于网路的问题,有分别查看各网段路由设置.但没有发现问题.
以上的测试,好象都可以排除.难不成是MS的Bug.在网上查了一通,根本没有本到什么结果.现在,回头想一想webservice原理:
客户端和服务端把请求和数据结果以XML的形式进行SOAP包装,以HTTP等形式进行传送,从而实现相应交互
根据Webservice原理,应该可以肯定是Http超时.那么问题到底出现在哪里,路由器设置没有问题,网路也通顺.会不会是IE版本 问题.问题越来越接近.最后查看半天,没有发现问题,偶然点了一下IE的代理设置 .发现有设置代理.难不成是代理引发超时.经过最后测试.发现问题的根本原因就是代理设置超时时间120S.
&总结一下:
&&&& webservice超时问题,先应该从程式上着手.比如:web.config超时设置, 以及客户端的超时设置 .如果设置后还是发生超时.那就得从webservice运行原理上去找原因.也就是从http上找原因:比如:网路问题 ,IE代理设置问题, 以及其它对网路设置引发超时的问题
阅读(...) 评论()Android基于SOAP协议向WebService交互数据,修改请求超时时间
SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议。
通过第三方提供的架包ksoap2--assembly-2.4-jar-with-dependencies.jar,我们可以向服务器进行请求调用自己需要的服务。下面以.cn/提供的天气预报web服务为例。
下面是向远处服务器进行请求的详细操作类WebServiceUtil
复制到剪贴板& 代码
public class WebServiceUtil {&&
&&& //命名空间&&
&&& private static final String NAMESPACE = &.cn/&;&&
&&& //WebService地址&&
&&& private static final String URL = &.cn/WebServices/WeatherWebService.asmx?wsdl&;&&
&&& //需要调用的方法名&&
&&& private static final String getSupportProvince = &getSupportProvince&;&&
&&&& * @desc 获得洲、国内外省份和城市信息&
&&&& * @return 省份列表&
&&& public List getAllProvince() {&&
&&&&&&& List allProvince = new ArrayList();&&
&&&&&&&&&&
&&&&&&& try {&&
&&&&&&&&&&& //1.实例化SoapObject对象&&
&&&&&&&&&&& SoapObject request = new SoapObject(NAMESPACE, getSupportProvince);&&
&&&&&&&&&&&&&&
&&&&&&&&&&& //2.如果方法需要参数,设置参数&&
//&&&&&&& request.setProperty(&参数名称&, &参数值&);&&
&&&&&&&&&&&&&&
&&&&&&&&&&& //3.设置Soap的请求信息,参数部分为Soap协议的版本号&&
&&&&&&&&&&& SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);&&
&&&&&&&&&&& envelope.bodyOut =&&
&&&&&&&&&&&&&&
&&&&&&&&&&& //4.构建传输对象&&
&&&&&&&&&&& AndroidHttpTransport transport = new AndroidHttpTransport(URL);&&
&&&&&&&&&&& transport.debug =&&
&&&&&&&&&&&&&&
&&&&&&&&&&& //5.访问WebService,第一个参数为命名空间 + 方法名,第二个参数为Envelope对象&&
&&&&&&&&&&& transport.call(NAMESPACE + getSupportProvince, envelope);&&
&&&&&&&&&&&&&&
&&&&&&&&&&& //6.解析返回的数据&&
&&&&&&&&&&& SoapObject result = (SoapObject) envelope.getResponse();&&
&&&&&&&&&&& int count = result.getPropertyCount();&&
&&&&&&&&&&& for (int i = 0; i & i++) {&&
&&&&&&&&&&&&&&& allProvince.add(result.getProperty(i).toString());&&
&&&&&&&&&&& }&&
&&&&&&& } catch (IOException e) {&&
&&&&&&&&&&& e.printStackTrace();&&
&&&&&&& } catch (XmlPullParserException e) {&&
&&&&&&&&&&& e.printStackTrace();&&
&&&&&&& }&&
&&&&&&& return allP&&
使用还是比较简单的,在这我只以天气预报服务中提供的获取省份信息的方法getSupportProvince为例,详细的解释了基于soap协议的访问操作。
在访问远程服务器提供的服务时,有时会因为网络问题或者是服务器端问题,而导致客户端侧一直处于请求连接状态,此时我们希望可以控制请求得不到响应的超时时间TimeOut.
想要控制请求的超时时间,我们需要根据ksoap2-android-assembly-2.4-jar-with-dependencies.jar包,修改一些访问的控制类。
1.首先重写架包中的ServiceConnectionSE.Java,添加设置超时时间的方法,可以在你的工程里重写这个类
复制到剪贴板& Java代码
package com.ahutzh.&&
import java.io.IOE&&
import java.io.InputS&&
import java.io.OutputS&&
import java.net.HttpURLC&&
import java.net.URL;&&
import org.ksoap2.transport.ServiceC&&
public class ServiceConnectionSE&&
& implements ServiceConnection&&
& private HttpURLC&&
& public ServiceConnectionSE(String url)&&
&&& throws IOException&&
&&& this.connection = ((HttpURLConnection)new URL(url).openConnection());&&
&&& this.connection.setUseCaches(false);&&
&&& this.connection.setDoOutput(true);&&
&&& this.connection.setDoInput(true);&&
& public void connect() throws IOException {&&
&&& this.connection.connect();&&
& public void disconnect() {&&
&&& this.connection.disconnect();&&
& public void setRequestProperty(String string, String soapAction) {&&
&&& this.connection.setRequestProperty(string, soapAction);&&
& public void setRequestMethod(String requestMethod) throws IOException {&&
&&& this.connection.setRequestMethod(requestMethod);&&
& public OutputStream openOutputStream() throws IOException {&&
&&& return this.connection.getOutputStream();&&
& public InputStream openInputStream() throws IOException {&&
&&& return this.connection.getInputStream();&&
& public InputStream getErrorStream() {&&
&&& return this.connection.getErrorStream();&&
& //设置连接服务器的超时时间,毫秒级,此为自己添加的方法&&
& public void setConnectionTimeOut(int timeout){&&
&&&&& this.connection.setConnectTimeout(timeout);&&
再自己写一个传输对象类,类似于架包中的AndroidHttpTransport类,命名为MyAndroidHttpTransport.java
复制到剪贴板& Java代码
package com.ahutzh.&&
import java.io.IOE&&
import org.ksoap2.transport.HttpTransportSE;&&
import org.ksoap2.transport.ServiceC&&
public class MyAndroidHttpTransport extends HttpTransportSE {&&
&&& private int timeout = 30000; //默认超时时间为30s&&
&&& public MyAndroidHttpTransport(String url) {&&
&&&&&&& super(url);&&
&&& public MyAndroidHttpTransport(String url, int timeout) {&&
&&&&&&& super(url);&&
&&&&&&& this.timeout =&&
&&& protected ServiceConnection getServiceConnection(String url) throws IOException {&&
&&&&&&& ServiceConnectionSE serviceConnection = new ServiceConnectionSE(url);&&
&&&&&&& serviceConnection.setConnectionTimeOut(timeout);&&
&&&&&&& return new ServiceConnectionSE(url);&&
完成这之后,在前面的第四步构建传输对象中,就不要使用架包中的AndroidHttpTransport,而使用我们自己的写的这个类。
复制到剪贴板& Java代码
//4.构建传输对象&&
//&&&&&&&&&&& AndroidHttpTransport transport = new AndroidHttpTransport(URL);&&
//&&&&&&&&&&& transport.debug =&&
&&&&&&&&&&& int timeout = 15000;& //set timeout 15s&&
&&&&&&&&&&& MyAndroidHttpTransport transport = new MyAndroidHttpTransport(URL, timeout);&&
&&&&&&&&&&& transport.debug =&&
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 soap超时时间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信