首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Padarn OpennetCF套接字连接已关闭

Padarn OpennetCF套接字连接已关闭
EN

Stack Overflow用户
提问于 2015-06-20 16:43:38
回答 1查看 229关注 0票数 1

我正在为我的项目评估Padarn,并尝试实现一个非常简单的示例。我需要Padarn为我的WIN CE 5.0或6.0 web项目,我买了一个许可证,这是我的配置部分:

代码语言:javascript
复制
    static void Main(string[] args)
    {

            m_padarnServer = new WebServer();
            m_padarnServer.Start();
    }

这是我的渲染函数:

代码语言:javascript
复制
  protected override void Render(HtmlTextWriter writer)
    {            

            if (Response.IsClientConnected)
            {
                Response.Write("OK");
                Response.Flush();
                writer.Flush();
            }

    }

这是我的配置文件:

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
 <configSections>
<section name="WebServer"   type="OpenNETCF.Web.Configuration.ServerConfigurationHandler, OpenNETCF.Web" />
<section name ="httpRuntime" type ="OpenNETCF.Web.Configuration.HttpRuntimeConfigurationHandler, OpenNETCF.Web"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>        
 </configSections>
  <WebServer
   DefaultPort="80"
   MaxConnections="20"
   DocumentRoot="\nandFlash\Inetpub\"
   Logging="true"
   LogFolder="\Temp\Logs"
   LogExtensions="aspx;html;htm;zip"
   UseSsl="false"
   >
  <DefaultDocuments>
  <Document>default.aspx</Document>
  </DefaultDocuments>
  <VirtualDirectories />
  <Cookies />
  <Caching />
  </WebServer>

 <httpRuntime
  maxRequestLength="3000000"
  requestLengthDiskThreshold="256"
  />
 <requestLimits maxAllowedContentLength="2097151000"/>

 </configuration>

这是套接字连接检查器:

代码语言:javascript
复制
  private static bool IsPortOpen()
    {
        TcpClient tcpClient = new TcpClient();            
        try
        {
            tcpClient.Connect("127.0.0.1", 80);                
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

我正在定期(每5秒)检查padarn正在运行的套接字连接( 127.0.0.1 : 80 ),但有时padarn服务器会关闭!我无法连接到它,当我检查套接字的端口时,它断开了连接,我必须重新启动Padarn

请帮帮我,这个配置是不是错了?我有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2015-08-10 12:48:28

我认为问题在于TcpClients永远不会显式断开或关闭,因此每次调用IsPortOpen时,都会创建另一个TCP连接并保持打开状态。

在某些情况下,web服务器会达到配置为可以处理的最大并发请求数(20?),或者客户端本身耗尽了资源,无法创建更多连接。

事情最终会自行解决,因为web服务器可能决定关闭不活动的连接,或者连接客户端上的垃圾收集器可能会开始清理已经超出范围的TcpClient实例,在此过程中调用它们的Close/Dispose方法并关闭底层连接。

重新启动Padarn解决了这个问题,这一事实表明,可能是web服务器首先耗尽了资源(或者在达到最大连接数时开始拒绝连接)。

尝试显式关闭每个连接:

代码语言:javascript
复制
private static bool IsPortOpen()
{
    using(TcpClient tcpClient = new TcpClient())
    {
        try
        {
            tcpClient.Connect("127.0.0.1", 80);
            return true;
        }
        catch(Exception)
        {
            return false;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30952076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档