Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetRequestStream随机抛出超时异常_C#_Asp.net_Wcf_Httpwebrequest_Timeout - Fatal编程技术网

C# GetRequestStream随机抛出超时异常

C# GetRequestStream随机抛出超时异常,c#,asp.net,wcf,httpwebrequest,timeout,C#,Asp.net,Wcf,Httpwebrequest,Timeout,在谷歌搜索了几天后,我真的无法解决这个问题。希望这里能找到解决办法 我在同一台服务器上调用WCF服务时使用的是附加代码。我在call WebReq.GetRequestStream()中随机得到超时错误 当我检查netstat时,我看到连接仍然打开,所以可能有问题,但我不知道如何解决它 //request inicialization HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);

在谷歌搜索了几天后,我真的无法解决这个问题。希望这里能找到解决办法

我在同一台服务器上调用WCF服务时使用的是附加代码。我在call WebReq.GetRequestStream()中随机得到超时错误

当我检查netstat时,我看到连接仍然打开,所以可能有问题,但我不知道如何解决它

       //request inicialization
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
        WebReq.Method = "POST";
        WebReq.ContentType = "application/json; charset=utf-8";
        WebReq.ContentLength = buffer.Length;

        WebReq.Proxy = null;
        WebReq.KeepAlive = false; //also tried with true
        WebReq.AllowWriteStreamBuffering = false; //also tried with true

        //this produces an error
        using (Stream PostData = WebReq.GetRequestStream())
        {
            PostData.Write(buffer, 0, buffer.Length);
            PostData.Close();
        }

         //open and read response
         HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
         Stream Answer = WebResp.GetResponseStream();
         StreamReader _Answer = new StreamReader(Answer);

         WebResp.Close();

         //return string
         return _Answer.ReadToEnd();
超时通常是在10秒的空闲时间之后抛出的,但也会在行中5个左右的请求之后抛出。真的找不到模式


此代码可能有什么问题?有没有其他(更好的)调用WCF服务的方法?

我不知道这是否一定是问题的原因,但是只有在web响应没有抛出异常时,您才关闭web响应,并且您永远不会关闭响应流。使用
使用
语句:

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    return reader.ReadToEnd();
}

这可以很好地解释问题,因为如果您保持响应打开,它将保持与web服务器的连接打开-这意味着连接池将无法使用该连接。

因为这是一种非常奇怪的行为,我想知道是否有其他方法调用托管在同一IIS服务器上的WCF服务。
我还有一件事,在没有真正优化的和所有其他方法中为此类调用创建TCP连接应该快得多。

我也有同样的问题,添加一个调用似乎可以解决它。

首先要记住的是查看URI、参数和发送的头,具体来说:

  • 保留字符。发送URI可以带来的保留字符 问题
    !*'( ) ; : @ & = + $ , / ? # []
  • URI长度:不应超过2000个字符
  • 长度头:大多数web服务器都会限制它们接受的头的大小。例如,在Apache中,默认限制为8KB

请记住,如果要发送较长长度的数据,建议在邮件正文中发送。

这样会更好一些,但我仍然会超时。所以,这真的很奇怪。因此,在第一次链接后,点击是加载和加载,如果在这段时间内点击页面上的相同或任何其他链接,那么页面将在第二次左右加载。因此,连接创建有问题。我想我没有发现它在同一台机器上。。。我想知道你是否已经用完了线程池线程-这些线程在同一个进程中吗?我是.net编程的新手。我已经用PHP编程好几年了,从来没有注意到这样的问题。有些事情要容易得多。所以我不确定你说的“线程池外线程”是什么意思?使用一个请求,我创建了两个左右的对WCF服务的HTTP请求,所以它使用相同的进程/请求。我应该为这个请求使用缓存吗?@AnzeR:我相信WCF将为来自线程池的请求提供服务;如果您是从服务本身调用服务,那么如果没有更多的线程池线程可用,则可能会导致死锁。您还没有真正解释调用代码是什么-是在同一个服务中,还是在一个单独的应用程序中?嗯,我真的不熟悉所有这些IIS设置。WEB和WCF使用相同的应用程序池,它们位于同一站点,但设置为不同的应用程序谢谢!帮助我解决了我的问题。记住:始终正确关闭连接;)