importcom.primeton.mq.service.DemoService
importorg.apache.cxf.endpoint.Client
importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean
importorg.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory
importorg.apache.cxf.transport.http.HTTPConduit
importorg.apache.cxf.transports.http.configuration.HTTPClientPolicy
publicclassdemo{
publicstaticvoid main(String[] args) {
//创建动态客户端
JaxWsDynamicClientFactoryfactory =JaxWsDynamicClientFactory.newInstance()
Clientclient = factory.createClient("http://localhost:8090/demo/api?wsdl")
// 需要密码的情况需要加上用户名和密码
//client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD))
HTTPConduitconduit = (HTTPConduit) client.getConduit()
HTTPClientPolicyhttpClientPolicy = newHTTPClientPolicy()
httpClientPolicy.setConnectionTimeout(2000)//连接超时
httpClientPolicy.setAllowChunking(false)//取消块编码
httpClientPolicy.setReceiveTimeout(120000)//响应超时
conduit.setClient(httpClientPolicy)
//client.getOutInterceptors().addAll(interceptors)//设置拦截器
try{
Object[] objects = newObject[0]
// invoke("方法名",参数1,参数2,参数3....)
objects = client.invoke("sayHello","sujin")
System.out.println("返回数据:"+ objects[0])
}catch(Exceptione){
e.printStackTrace()
}
调用webservice超时问题的解决:一.服务器端设置
1、web.config配置,<system.web></system.web>里面增加:<httpRuntime maxRequestLength="10240" appRequestQueueLimit="100" useFullyQualifiedRedirectUrl="true" executionTimeout="1200" />
2、扩大代理类的超时限制,默认是90秒
YourWebService yws = new YourWebService()
yws.Timeout = 1200000//20分钟
二.客户端设置
1、修改 app.config 文件,添加如下代码:
<httpRuntime executionTimeout="600" />
请求执行超时时间为600秒(默认为110秒)
2、设置 Web services 的 Timeout 属性
对 XML Web services 的同步调用的超时(以毫秒为单位)。默认为 100000 毫秒。
lywSqCommon.sqsdData.GetData getData = new lywSqCommon.sqsdData.GetData()//GetData 为类名
getData.Timeout=700000//单位为毫秒
指示 XML Web services 客户端等待同步 XML Web services 请求完成的时间(以毫秒计)。
提示:如果将 Timeout 属性设置为 Timeout.Infinite,则指示该请求无超时。即使 XML Web services 客户端可以将 Timeout 属性设置为无超时,Web 服务器仍可以在服务器端使请求超时。
系统将以上面两项设置的最小者作为 *** 作超时的时间长度。
WebService超时设置1. 服务器端设置超时
在 web.config 的 system.web 里添加如下配置项:
<httpRuntime
executionTimeout="30"
/>
以上时间单位是秒.
记得要把 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 = 30*1000
return wr
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)