0

複数のURIを呼び出すのに問題があります。現在、これは現在の形式で機能しますが、サイトに到達できない(存在しない)場合は、無視して続行する必要がある他の呼び出しが中断されます。これは単一の投稿方法で構築されましたが、要件が変更されました。

私はスレッド化の経験がほとんどありませんが、これは私がスレッドを作成するために行ったことです。

  private void makethread(string Url, string useproxy, string xml)
{
    //Parameters given put into list and passed with Thread.
    var urls = new List<string>() { Url, useproxy, xml };

    //Create thread

    Thread t1 = new Thread(new ParameterizedThreadStart(HttpPost));
    t1.Start(urls);


}

  public void SetUrls()
{
    String Url;
    int count = 1;

    string xml = CreateXML();
    string useproxy = "(none)";
    do
    {
        Url = objIniFile.GetString("Post", count.ToString(), "(none)");
        useproxy = objIniFile.GetString("Post", count.ToString() + "Proxy", "(none)").ToUpper() ;
        if (Url != "(none)")
        {

           // HttpPost(Url, xml , useproxy);
            makethread(Url , useproxy , xml);


        }
        count++;
    }
    while (Url != "(none)");
}

SetUrlsはURLを取得し、プロキシを使用する必要があるかどうかを判断して、上記のmake threadメソッドに渡します。このメソッドは、xml、uri、proxyをオブジェクトとしてHTTPPostに渡します。

  public void HttpPost(object urls)
{

    string url= "none";
    string xml= "none";
    string useproxy = "none";

    int count = 0;
    //Splits Object to list and populate variables 
    foreach (var item in urls as List<string>)
    {
        if (count == 0) { url = item; }
        if (count == 1) { useproxy = item;  }
        if (count == 2) { xml = item; }
        count++;
    }

    string vystup = null;
    string proxy = ProxyAddress;

    string postData = xml;
    //--------------

    try
    {
        HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
        HttpWebRequest.DefaultCachePolicy = policy;


        byte[] buffer = Encoding.UTF8.GetBytes(postData);
        //Initialisation
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
        //method is post

        if (useproxy == "ON")
        {
            WebProxy myProxy = new WebProxy();
            // Create a new Uri object.
            Uri newUri = new Uri(proxy);

            // Associate the new Uri object to the myProxy object.
            myProxy.Address = newUri;
            WebReq.Proxy = myProxy;
        }

        WebReq.KeepAlive = false;
        WebReq.Method = "POST";
        WebReq.ContentType = "application/x-www-form-urlencoded";
        //The length of the buffer
        WebReq.ContentLength = buffer.Length;
        Stream PostData = WebReq.GetRequestStream();
        //write, and close.
        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        //Get the response handle
        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        //Let's show some information about the response
        Console.WriteLine(WebResp.StatusCode);
        Console.WriteLine(WebResp.Server);

        //Do not worry about response!.
        //read the response (the string), and output it.
        Stream Answer = WebResp.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        vystup = _Answer.ReadToEnd();


        // MessageLog("Finished Posting " + DateTime.Now, "INFO");

        if (vystup != "OK")
        {

        }
    }
    catch (WebException ex)
    {

        Console.WriteLine(ex);
    }



}
#endregion

2つの有効なURLがある場合、それは機能します。3つのURL(2番目が無効な場合)を試してみると、タイムアウトのために2番目のスレッドが終了した後でも、最初のURLは終了しますが、もう1つのURLは終了しません。

スレッドを正しく使用していないと思いますが、どこに助けがあればよいかわかりません。

ありがとうございました。

4

1 に答える 1

0

構成ファイルまたは次のプロパティを使用して、同時接続の数を増やす必要があります: DefaultConnectionLimit

于 2012-05-21T16:42:43.113 に答える