Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# 维护与web服务器的会话_C#_Wcf_Session_Cookies_Https - Fatal编程技术网

C# 维护与web服务器的会话

C# 维护与web服务器的会话,c#,wcf,session,cookies,https,C#,Wcf,Session,Cookies,Https,我有一个WCF服务正在使用一个网站。在任何人指出这种方法的明显缺陷和固有的不稳定性之前,请原谅我,我被迫对此进行研究 交易流程如下: public HttpWebPostResponse PostStrOnUrlRandom(string url, string strPost, string Refer, CookieCollection cookieJarR) { log.Debug("Method Entery [PostStrOnUrl]");

我有一个WCF服务正在使用一个网站。在任何人指出这种方法的明显缺陷和固有的不稳定性之前,请原谅我,我被迫对此进行研究

交易流程如下:

public HttpWebPostResponse PostStrOnUrlRandom(string url, string strPost, string Refer, CookieCollection cookieJarR)
    {

        log.Debug("Method Entery [PostStrOnUrl]");
        StreamWriter myWriter = null;
        string resultHtml = null;
        HttpWebResponse objResponse = null;
        HttpWebPostResponse hpr = null;

        HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
        objRequest.ProtocolVersion = HttpVersion.Version10;
        objRequest.Timeout = 90000;
        objRequest.CookieContainer = cookieJar;
        objRequest.Method = "POST";
        objRequest.ContentType = "application/x-www-form-urlencoded";
        objRequest.AllowAutoRedirect = true;
        objRequest.MaximumAutomaticRedirections = 100;
        objRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0";
        objRequest.Referer = Refer;
        objRequest.Host = ConfigurationManager.AppSettings["Host"];
        objRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
        objRequest.Headers.Add("Origin", ConfigurationManager.AppSettings["Origin"]);
        objRequest.Headers.Add("Cache-Control", "max-age=0");
        objRequest.Headers.Add("Accept-Encoding", "gzip, deflate, br");
        objRequest.Headers.Add("Accept-Language", "en-US,en;q=0.8");
        objRequest.KeepAlive = true;

        log.Debug("Making HttpWebRequest to" + url);

        Uri target = new Uri(url);
        log.Debug("Target Url : " + url.ToString());
        foreach (Cookie cookie in cookieJarR)
        {
            objRequest.CookieContainer.Add(cookie);
            cookieJar.Add(cookie);
            log.Debug(cookie.Name + "" + cookie.Value + "" + "" + cookie.Domain);

        }

        try
        {
            myWriter = new StreamWriter(objRequest.GetRequestStream());
            myWriter.Write(strPost);
            log.Debug("Posting on Url StrPost =" + strPost);
        }
        catch (Exception e)
        {
            log.Debug(e.Message);
        }
        finally
        {
            myWriter.Close();
        }

        log.Debug("Making Request.");

        try
        {
            objResponse = (HttpWebResponse)objRequest.GetResponse();
            using (StreamReader sr =
                new StreamReader(objResponse.GetResponseStream()))
            {
                resultHtml = sr.ReadToEnd();
                sr.Close();
            }
            hpr = new HttpWebPostResponse(objResponse.ResponseUri.ToString(), resultHtml, objResponse.StatusCode.ToString());
            return hpr;
        }


        catch (Exception e)
        {
            log.Error(e.Message);
            log.Error("Exception", e.InnerException);
            return null;
        }
    }
频道->WCF服务->(HTTP POST/GET)->网站

步骤: PostStrOnUrlRandom在循环中被调用,向其传递要发布的字符串(strPost)、url(url)和CookieJar(CookieJarR),其中包含来自上一篇文章的cookies

  • HTTP获取url(不在下面的代码中)
  • 我得到HTML页面的响应,使用XPATH解析它,确认它是正确的页面并保存Cookies
  • 在url上传递此方法的POST strPost
  • 获取响应HTML页面,使用XPATH对其进行解析
  • 从数据库获取下一个url和strPost
  • 在下一个url上发布下一个strPost
  • 我必须这样做5个网址。然后我必须将响应发送回频道。然后频道又给我发了一个请求,我必须再发一篇帖子。我使用与以前请求相同的cookies来实现这一点

    这就是问题所在,我返回一个内部服务器错误500。如果我真的在这篇文章上退休了,使用相同的strPost、url和Cookies,它会在3-4个退休后工作。我不明白这是为什么。

    代码如下:

    public HttpWebPostResponse PostStrOnUrlRandom(string url, string strPost, string Refer, CookieCollection cookieJarR)
        {
    
            log.Debug("Method Entery [PostStrOnUrl]");
            StreamWriter myWriter = null;
            string resultHtml = null;
            HttpWebResponse objResponse = null;
            HttpWebPostResponse hpr = null;
    
            HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
            objRequest.ProtocolVersion = HttpVersion.Version10;
            objRequest.Timeout = 90000;
            objRequest.CookieContainer = cookieJar;
            objRequest.Method = "POST";
            objRequest.ContentType = "application/x-www-form-urlencoded";
            objRequest.AllowAutoRedirect = true;
            objRequest.MaximumAutomaticRedirections = 100;
            objRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0";
            objRequest.Referer = Refer;
            objRequest.Host = ConfigurationManager.AppSettings["Host"];
            objRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            objRequest.Headers.Add("Origin", ConfigurationManager.AppSettings["Origin"]);
            objRequest.Headers.Add("Cache-Control", "max-age=0");
            objRequest.Headers.Add("Accept-Encoding", "gzip, deflate, br");
            objRequest.Headers.Add("Accept-Language", "en-US,en;q=0.8");
            objRequest.KeepAlive = true;
    
            log.Debug("Making HttpWebRequest to" + url);
    
            Uri target = new Uri(url);
            log.Debug("Target Url : " + url.ToString());
            foreach (Cookie cookie in cookieJarR)
            {
                objRequest.CookieContainer.Add(cookie);
                cookieJar.Add(cookie);
                log.Debug(cookie.Name + "" + cookie.Value + "" + "" + cookie.Domain);
    
            }
    
            try
            {
                myWriter = new StreamWriter(objRequest.GetRequestStream());
                myWriter.Write(strPost);
                log.Debug("Posting on Url StrPost =" + strPost);
            }
            catch (Exception e)
            {
                log.Debug(e.Message);
            }
            finally
            {
                myWriter.Close();
            }
    
            log.Debug("Making Request.");
    
            try
            {
                objResponse = (HttpWebResponse)objRequest.GetResponse();
                using (StreamReader sr =
                    new StreamReader(objResponse.GetResponseStream()))
                {
                    resultHtml = sr.ReadToEnd();
                    sr.Close();
                }
                hpr = new HttpWebPostResponse(objResponse.ResponseUri.ToString(), resultHtml, objResponse.StatusCode.ToString());
                return hpr;
            }
    
    
            catch (Exception e)
            {
                log.Error(e.Message);
                log.Error("Exception", e.InnerException);
                return null;
            }
        }