通过改造在 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 中的异常

在改造中调用 api 时响应消息未找到和响应代码 404

扩展从 JQuery 调用 Web 服务时从 ASP.NET 引发的异常

在调用 Web 服务时信任过期的自签名证书

尝试从我的 android 服务调用 web 服务时出现 android.os.NetworkOnMainThreadException 异常?

从 ASP.net 4 Web API 2 项目通过 HttpClient 调用 REST 服务导致异常