草庐IT

Java访问Elasticsearch报错Request cannot be executed; I/O reactor status: STOPPED

陈明亮chenml 2024-05-10 原文

简介

使用ES过程中遇到一个Request cannot be executed; I/O reactor status: STOPPED 的异常,大概意思是和server端的连接异常终止了。开始以为是引用的版本不对,或者自己使用问题,后来发现就是因为OOM导致程序宕机,进而引发连接终止。

环境

功能

SpringBoot 的程序通过 SpringDataElasticsearch 访问ES-server 获取数据。

ES-SERVER

  • 版本:7.15.2

ES-CLIENT

ES-CLIENT 就是 SpringBoot 程序,核心pom依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.5.3</version>
</dependency>

问题

  • 部署到测试环境之后,用户量大了之后接口报错,报错信息为:
Request cannot be executed; I/O reactor status: STOPPED
  • 后端程序处于假死状态,访问其他接口一直转圈,无法响应内容
  • 重启程序之后一切正常,用户量大了之后又有此问题
  • 详细报错日志为:
2021-12-31/19:26:31.748||||^_^|[pool-4-thread-1] ERROR o.a.http.impl.nio.client.InternalHttpAsyncClient 66 - I/O reactor terminated abnormally
org.apache.http.nio.reactor.IOReactorException: I/O dispatch worker terminated abnormally
        at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:359)
        at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:221)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.OutOfMemoryError: Java heap space
2021-12-31/19:26:32.783||||^_^|[http-nio-8092-exec-3] ERROR com.nghsmart.datacenter.handler.ExceptionHandler 67 - handleRuntimeException:
java.lang.RuntimeException: Request cannot be executed; I/O reactor status: STOPPED
        at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:888)
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:283)
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:270)
        at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1654)
        at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1624)
        at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1594)
        at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:1110)
        at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.lambda$search$11(ElasticsearchRestTemplate.java:296)
        at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.execute(ElasticsearchRestTemplate.java:383)
        at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.search(ElasticsearchRestTemplate.java:296)
        at org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.search(AbstractElasticsearchTemplate.java:513)
        at com.nghsmart.datacenter.domain.area.service.impl.AreaDashboradServiceImpl.getRotationStatisticsInfo(AreaDashboradServiceImpl.java:166)
        at com.nghsmart.datacenter.domain.area.controller.AreaDashboradController.getRotationStatisticsInfo(AreaDashboradController.java:76)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at com.nghsmart.commonauthentication.filter.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:52)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
        at org.apache.http.util.Asserts.check(Asserts.java:46)
        at org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90)
        at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123)
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:279)
... 69 common frames omitted
  • 测试环境用户量一大就报,本地IDEA中一次也没有报这个问题
  • 使用JMETER设置50个线程并发访问可以稳定复现此问题

原因

程序接口中将一块很大的数据存进JAVA集合中引发了oom,oom异常导致程序宕机,处于假死状态,进而导致 ES-CLIENT 和 ES-SERVER 端的 http 连接异常终止,然后org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning 方法报异常。

ensureRunning:

protected void ensureRunning() {
    final Status currentStatus = this.status.get();
    Asserts.check(currentStatus == Status.ACTIVE, "Request cannot be executed; " +
            "I/O reactor status: %s", currentStatus);
}

check:

public static void check(final boolean expression, final String message, final Object arg) {
    if (!expression) {
        throw new IllegalStateException(String.format(message, arg));
    }
}
  • SpringDataElasticsearch 和ES-SERVER 是长链接,只要报了OOM,当前和 ES-SERVER 的连接线程都将报异常,也就是说,虽然OOM只报了一次,但是可能有多个线程都在 Asserts.check 方法中报异常
  • 其实不仅仅是和ES-SERVER 的连接异常关闭,观察大量日志后发现和nacos 的连接也有问题:
2022-01-04 15:59:07.366 [com.alibaba.nacos.client.remote.worker]  INFO com.alibaba.nacos.common.remote.client.printIfInfoEnabled:60 - [117be10e-119f-4253-a348-71c95a8978a1]Server healthy check fail,currentConnection=1641282430796_192.168.1.90_43108
2022-01-04 15:59:07.367 [com.alibaba.nacos.client.remote.worker]  INFO com.alibaba.nacos.common.remote.client.printIfInfoEnabled:60 - [117be10e-119f-4253-a348-71c95a8978a1] try to re connect to a new server ,server is  not appointed,will choose a random server.
  • 测试环境运行SpringBoot内存配置为:-Xms256m -Xmx512m,使用 java -jar 命令启动。测试环境能复现,本地idea无法复现的原因是内存配置不同导致的,本地idea内存给的2g。编辑 run/debug configuration ,设置 VM options 和测试环境相同,使用jemter压测本地idea中跑的程序,也能复现此问题

解决办法

  • 优化接口,解决OOM问题
  • 增大测试环境内存配置

解决过程

HttpClient问题

这个思路并没有解决我的问题,但是解决问题的过程中花了大量时间研究。其实应该仔细阅读报错log的上下文和接口代码上下文,一开始没有留意到oom的异常

大概意思是说低版本 httpClient 有这个问题,高版本就没有这个问题,是apache-httpclient 导致的。具体是因为捕获到线程异常之后http连接就主动终止了,解决思路是升级版本或者是重写处理器,遇到异常之后不终止连接。

升级httpclient相关pom依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <!-- 排除 httpclient、httpcore、 httpcore-nio这三个依赖,并手动引入最新版本,解决es客户端报Request cannot be executed; I/O reactor status: STOPPED问题 -->
    <exclusions>
<!--                <exclusion>-->
<!--                    <groupId>org.apache.httpcomponents</groupId>-->
<!--                    <artifactId>httpclient</artifactId>-->
<!--                </exclusion>-->
<!--                <exclusion>-->
<!--                    <groupId>org.apache.httpcomponents</groupId>-->
<!--                    <artifactId>httpcore</artifactId>-->
<!--                </exclusion>-->
<!--                <exclusion>-->
<!--                    <groupId>org.apache.httpcomponents</groupId>-->
<!--                    <artifactId>httpcore-nio</artifactId>-->
<!--                </exclusion>-->
        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>


<!-- start -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>7.15.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore-nio</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--  end  -->
<!-- start:排除 httpclient、httpcore、 httpcore-nio这三个依赖,并手动引入最新版本,解决es客户端报Request cannot be executed; I/O reactor status: STOPPED问题 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore-nio</artifactId>
    <version>4.4.14</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.14</version>
</dependency>

<!--  end   -->

重写ElasticsearchRestTemplate:


import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.message.BasicHeader;
import org.apache.http.nio.reactor.IOReactorException;
import org.apache.http.nio.reactor.IOReactorExceptionHandler;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Configuration
public class EsClientConfig {
   
    @Value("${es.host}")
    private String host;
    @Value("${es.port}")
    private Integer port;
   
    @Bean
    public ElasticsearchRestTemplate initElasticsearchRestTemplate() {
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port))
                .setRequestConfigCallback(
                        config -> config.setConnectTimeout(180000)
                                .setConnectionRequestTimeout(180000)
                                .setSocketTimeout(180000))
                .setHttpClientConfigCallback(
                        httpClientBuilder -> {
                            httpClientBuilder.setMaxConnTotal(100);
                            httpClientBuilder.setMaxConnPerRoute(50);
                            List<Header> headers = new ArrayList<>(2);
                            headers.add(new BasicHeader("Connection", "keep-alive"));
                            headers.add(new BasicHeader("Keep-Alive", "720"));
                            httpClientBuilder.setDefaultHeaders(headers);
                            httpClientBuilder.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE);
                            try {
                                DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
                                ioReactor.setExceptionHandler(new IOReactorExceptionHandler() {
                                    @Override
                                    public boolean handle(IOException e) {
                                        log.debug("System may be unstable: IOReactor encountered a checked exception : " + e.getMessage());
                                        log.debug("start setHttpClientConfigCallback handle IOException e printStackTrace");
                                        e.printStackTrace();
                                        log.debug("end setHttpClientConfigCallback handle IOException e printStackTrace");
                                        // Return true to note this exception as handled, it will not be re-thrown
                                        return true;
                                    }
                                    @Override
                                    public boolean handle(RuntimeException e) {
                                        log.debug("System may be unstable: IOReactor encountered a runtime exception : " + e.getMessage() + ",e is {}", e);
                                        log.debug("start setHttpClientConfigCallback handle RuntimeException e printStackTrace ");
                                        e.printStackTrace();
                                        log.debug("end setHttpClientConfigCallback handle RuntimeException e printStackTrace ");
                                        // Return true to note this exception as handled, it will not be re-thrown
                                        return true;
                                    }
                                });
                                httpClientBuilder.setConnectionManager(new PoolingNHttpClientConnectionManager(ioReactor));
                            } catch (IOReactorException e) {
                                throw new RuntimeException(e);
                            }
                            return httpClientBuilder;
                        }
                );
        ElasticsearchRestTemplate elasticsearchRestTemplate = new ElasticsearchRestTemplate(new RestHighLevelClient(builder));
        return elasticsearchRestTemplate;
    }
}


关于此问题相关参考:

  • https://www.cnblogs.com/yangchongxing/p/15440197.html
  • https://github.com/elastic/elasticsearch/issues/42133
  • https://zhuanlan.zhihu.com/p/384269417
  • https://cloud.tencent.com/developer/article/1806886

引用

https://www.cnblogs.com/Naylor/p/15763941.html

有关Java访问Elasticsearch报错Request cannot be executed; I/O reactor status: STOPPED的更多相关文章

  1. c# - 如何使用 C# 创建 JSON post 到 api - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion我正在创建一个C#控制台应用程序,该应用程序从文本文件中读取文本,将其转换为JSON格式的字符串(保存在字符串变量中),并且需要将JSON请求发布到WebAPI。我正在使用.NETFramework4。我的难题是使用C#创建请求和获取响应。什么是必要的基本代码?代码中的注释会有所帮助。到目前为止,我得到的是以下内容,但我不确定我是否走在正确的轨道上。//POSTJSONREQUESTTOAPIHt

  2. c# - 检索文件的创建日期 (FTP) - 2

    我正在使用System.Net.FtpWebRequest类,我的代码如下:FtpWebRequestrequest=(FtpWebRequest)WebRequest.Create("ftp://example.com/folder");request.Method=WebRequestMethods.Ftp.ListDirectory;request.Credentials=newNetworkCredential("username","password");FtpWebResponseresponse=(FtpWebRespons

  3. c# - 如何在 XAML 中动态访问元素名称? - 2

    我有一个用户填写的XAML输入表单。我想验证这个表单。我有一个集合中的字段信息,我想遍历并检查每个字段。但是当它在字符串中时,我如何访问字段的名称,例如当fieldInformation.FieldName="CompanyName"我想检查"Field_CompanyName.Text"。伪代码:foreach(varfieldInformationin_fieldInformations){if(Field_{&fieldInformation.FieldName}.Text.Length>2){ErrorMessage.Text=String.Format("

  4. c# - 内部 protected 属性(property)仍然可以从不同的程序集访问 - 2

    我正在为有关辅助功能的初学者session设置一些演示代码,我发现我能够从派生类访问内部protected属性。我错过了什么?程序集1namespaceAccessibility{classProgram{staticvoidMain(string[]args){ExampleClassc=newExampleClass();c.Go();//c.Prop1=10;}}classExampleClass:DerivedClass{publicvoidGo(){this.Prop1=10;this.Prop2=10;//this.Prop3=10;//Doesn'twork//t

  5. c# - Autofac - 自动注册错误 : No constructors can be found with 'Public binding flags' - 2

    这是我的Global.asax.cspublicvoidRegisterContainersUsingAutofac(){//http://elegantcode.com/2009/01/07/ioc-libraries-compared///http://www.codeproject.com/Articles/25380/Dependency-Injection-with-Autofac//https://code.google.com/p/autofac///http://api.autofac.org/varbuilder=newContainerBuilder();build

  6. c# - 该进程无法访问该文件,因为它正被另一个进程使用 - 2

    我正在从SQLServer数据库字段获取二进制数据,并在我的应用程序具有权限的目录中本地创建文档。但是我仍然收到标题中指定的错误。我尝试了网上发布的许多建议,包括Stackoverflow上以前的帖子中建议的建议。我还使用了ProcessExplorer>FindHandle来定位锁,它没有返回任何内容,就好像文件没有被锁定一样。我正在使用下面的代码将文件保存到文件系统,然后我尝试稍后在应用程序进程中使用另一种方法将此文件复制到新位置。正是这个复制方法采用了抛出异常的新创建文件的路径。文件本身是用它的内容创建的,我可以通过Windows资源管理器打开它,没有任何问题。我是否遗漏了一些非

  7. c# - 在静态方法中访问参数的私有(private)成员? - 2

    这段代码如何编译?operatorint中的以下代码可以访问MyValue类的私有(private)变量?为什么?classProgram{staticvoidMain(string[]args){Myvaluemy=newMyvalue(100);Console.WriteLine(my+100);Console.Read();}}publicclassMyvalue{privateint_myvalue;publicMyvalue(intvalue){_myvalue=value;}publicstaticimplicitoperatorint(Myvaluev){returnv.

  8. c# - 调用线程无法访问此对象,因为另一个线程拥有它 - WPF - 2

    这个问题在这里已经有了答案:Thecallingthreadcannotaccessthisobjectbecauseadifferentthreadownsit[duplicate](4个答案)关闭8年前。我有通过套接字连接的硬件。我必须每5秒检查一次硬件是否已连接,由复选框指示。我实现了一个功能:privatestaticSystem.Timers.TimeraTimer;publicMainWindow(){InitializeComponent();client.BeginConnect(remoteEP,newAsyncCallback(ConnectCallback),cl

  9. c# - 错误 : Cannot implicitly convert type 'void' to 'System.Collections.Generic.List' - 2

    我正在尝试使用该控件从.ascx设置我的.ascx控件的属性。所以在我的一个包含此控件的.aspx中,我有以下代码试图设置我的嵌入式.ascx的ItemsList属性:Itemitem=GetItem(itemID);myUsercontrol.ItemList=newList<Item>().Add(item);我尝试设置的.ascx中的属性如下所示:publicList<Item>ItemsList{get{returnthis.itemsList;}set{this.itemsList=value;}}错误:无法将类型“void”隐式转换为“System.

  10. c# - 获取 url 的主要部分,包括虚拟目录 - 2

    我正在使用.net4.0c#。我希望能够从当前的http请求中获取url,包括任何虚拟目录。因此,例如(请求和寻求值(value)):http://www.website.com/shop/test.aspx->http://www.website.com/shop/http://www.website.com/test.aspx->http://www.website.com/http://website.com/test.aspx->http://website.com/如何实现这一目标? 最佳答案 这是我用的HttpConte

随机推荐

  1. C# - 检查变量是否已初始化 - 2

    我想检查一个变量是否在运行时以编程方式初始化。为了让这个原因不那么神秘,请看下面不完整的代码:strings;if(someCondition)s=someValue;if(someOtherCondition)s=someOtherValue;boolsIsUninitialized=/*assignvaluecorrectly*/;if(!sIsUninitialized)Console.WriteLine(s)elsethrownewException("Pleaseinitializes.");并完成相关位。一个hacky解决方案是用默认值初始化s:string

  2. c# - 如何遍历 XML 文件中的每个子节点? - 2

    我有一个XML文件,我想遍历每个子节点收集信息。这是我的C#代码,它只选取一个节点,我想在其子节点上使用foreach的FieldData。publicvoidLoadXML(){if(File.Exists("Data.xml")){//ReadingXMLXmlDocumentxmlDoc=newXmlDocument();xmlDoc.Load("Data.xml");//ThinksomethingneedstoreferenceChildnodes,soimayForeachthoughthemXmlNodeListdataNodes=xmlD

  3. c# - c# 中不区分大小写的 XML 解析器 - 2

    您对XML所做的一切都区分大小写,我知道这一点。但是,现在我发现自己处于这样一种情况,如果我以某种方式使xml名称/属性识别不区分大小写,我正在编写的软件将产生更少的错误。不区分大小写的XPath将是上帝派来的。在C#中是否有一种简单的方法/库可以做到这一点? 最佳答案 一个XMl文档可以有两个不同的元素,分别命名为:MyName和myName--目的是为了不同。将它们转换/视为同名是一个错误,可能会产生严重后果。如果不是上述情况,那么这里有一个更精确的解决方案,使用XSLT将文档处理成只有小写元素名称和小写属性名称的文档:<

  4. c# - 即使在 using block 中抛出异常,资源也会被释放吗? - 2

    这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:DoesDisposemethodstillgetcalledwhenExceptionisthrowninsideofUsingstatment?访问数据库时,我有很多usingblock。我想知道-如果必须在usingblock中抛出异常,即使未到达block的末尾,是否仍会处理必要的资源?或者我需要自己在catchblock中手动关闭它们吗?

  5. c# - 使用 LinqPad 将字符串转换为 Guid - 2

    当我在LinqPad中运行时varProductIds=frompinProductswherep.Id="F1FE990C-4525-4BFE-9E2C-A7AFFF0DDA1F"selectp;ProductIds.Dump();它给了我Cannotimplicitlyconverttype'string'to'System.Guid'我只是不知道如何将其正确转换为我猜的GUId 最佳答案 尝试使用Guid.Parse(stringguid)静态方法。varProductIds=f

  6. c# - 添加到 ICollection - 2

    我目前正在编写一个C#项目,我需要对该项目进行单元测试。对于我需要进行单元测试的方法之一,我使用了一个ICollection,它通常由列表框中的选定项填充。当我为它创建行的方法创建单元测试时ICollectionicollection=null;//Initialisetoanappropriatevalue如何创建此ICollection的实例和集合的项目? 最佳答案 ICollection是接口(interface),不能直接实例化。您需要实例化一个实现ICollection的类;例如,List<T>.此外,ICol

  7. C# DateTime - 如何检查时间部分是否为 NULL? - 2

    除了检查小时为0、分钟为0和秒为0之外,是否有任何简单的方法来检查DateTime值的时间部分是否为NULL?谢谢。 最佳答案 我发现这非常可读:varisTimeNull=(myDateTime.TimeOfDay==TimeSpan.Zero); 关于C#DateTime-如何检查时间部分是否为NULL?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7360750/

  8. c# - 我怎样才能让 OData DELETE 工作? - 2

    我已经创建了一个OData服务(WCF数据服务)和一个消费者来测试它。以前,当我尝试删除时,我收到WebDAV405错误消息,“方法不允许”。所以我用谷歌搜索并发现:http://nikhilthaker86.wordpress.com/2010/03/27/issue-hosting-restful-services-on-iis-7/我按照说明从IIS7的网站(服务)中删除了WebDav模块。现在我收到了这个错误信息:“HTTP错误500.21-内部服务器错误”处理程序“WebDAV”在其模块列表中有一个坏模块“WebDAVModule”模块:IISWeb核心通知:ExecuteR

  9. c# - 错误 "Missing operand after ' 类农算子”—— 'Bannon' 算子是什么? - 2

    在C#控制台应用程序上工作,我有一行:rowsFound=tempUsers.Select("EmailAddress='"+userData[2].ToString()+"'");rowsFound是一个DataRow[],tempUsers是一个DataTable,而userData是一个SqlDataReader。userData的索引错误(它是1),我得到了这个错误:System.Data.SyntaxErrorExceptionwasunhandledMessage=Syntaxerror:Missingoperandafter

  10. c# - 如何将 object[] 转换为更具体类型的数组 - 2

    如果我在编译时知道类型或者它是一个通用参数,这将非常简单,因为我可以做类似myArray.Cast<T>()的事情但我实际上拥有的基本上是这个。我没有已知类型或通用参数。我有一个System.Type变量。//couldactuallybeanythingelseTypemyType=typeof(string);//ialreadyknowalltheelementsarethecorrecttypesobject[]myArray=newobject[]{"foo","bar"};我可以使用某种反射魔法来获得string[]吗?包含相同数