通过改造在 Web 服务调用中超时异常
Posted
技术标签:
【中文标题】通过改造在 Web 服务调用中超时异常【英文标题】:Timeout exception in web service call by retrofit 【发布时间】:2018-01-05 06:06:21 【问题描述】:我正在开发通过改造库调用“球衣”服务的 android 应用程序。 当我的服务需要很长时间时,引发了超时异常。 我使用下面的代码来处理超时异常。
final OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(120, TimeUnit.SECONDS);
client.setReadTimeout(120, TimeUnit.SECONDS);
client.setWriteTimeout(120, TimeUnit.SECONDS);
restAdapter = new retrofit.RestAdapter.Builder()
.setEndpoint(URL)
.setErrorHandler(new MyErrorHandler())
.setLogLevel(retrofit.RestAdapter.LogLevel.FULL)
.setClient(new OkClient(client))
.build();
但服务调用在 30 秒后失败,我的响应正文为空。
我认为超时设置不起作用并进行改造 没有等到我的服务处理完成,而服务正在服务器中运行,并且我在服务器中记录了我的响应。
应用服务器:weblogic
服务库:球衣
Android jar 文件:okhttp-2.7.5、okhttp-urlconnection-2.7.5、retrofit-1.9.0
请帮帮我。
谢谢。
【问题讨论】:
Retrofit and OkHttpClient, catch connection timeout in failure method的可能重复 【参考方案1】:使用这个
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor()
@Override
public Response intercept(Chain chain) throws IOException
Request.Builder ongoing = chain.request().newBuilder();
ongoing.addHeader("Content-Type", "application/json; charset=utf-8");
return chain.proceed(ongoing.build());
)
.connectTimeout(300, TimeUnit.SECONDS)
.readTimeout(300, TimeUnit.SECONDS)
.writeTimeout(300, TimeUnit.SECONDS)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.URL_API)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.build();
【讨论】:
可能服务器拒绝了你的请求。 30 秒后,retrofit 得到空响应,但在服务器中创建响应,weblogic 抛出此异常“java.io.IOException:已建立的连接已被主机中的软件中止”以上是关于通过改造在 Web 服务调用中超时异常的主要内容,如果未能解决你的问题,请参考以下文章
Delphi - 在连接到 Oracle 并调用 Web 服务方法后关闭时 ntdll.dll 中的异常
扩展从 JQuery 调用 Web 服务时从 ASP.NET 引发的异常
尝试从我的 android 服务调用 web 服务时出现 android.os.NetworkOnMainThreadException 异常?