C# 使用WebResponse实现当前计划/问题中的任务

C# 使用WebResponse实现当前计划/问题中的任务,c#,C#,我已经为我当前的项目执行了任务,但在那之后,我有一些问题要处理。让我向您展示整个第一个应用程序—未实现任务的实现和修改后的锁定捕获,以及我在这个新版本中遇到的问题。请注意,与旧的是工作良好 应用程序的第一个版本(如果您需要更多代码,请询问) 因为我知道特定元素在服务器上并没有响应,所以我把它放在超时文件中。在完成任务之后,我不知道发生了什么。总结第一个应用程序工作正常,第二个不正常。您能支持吗?这是太多的代码,任何人都读不懂。你应该发布一个小的,完整的重现你的问题。我认为代码要少一些。正在等待您

我已经为我当前的项目执行了任务,但在那之后,我有一些问题要处理。让我向您展示整个第一个应用程序—未实现任务的实现和修改后的锁定捕获,以及我在这个新版本中遇到的问题。请注意,与旧的是工作良好

应用程序的第一个版本(如果您需要更多代码,请询问)


因为我知道特定元素在服务器上并没有响应,所以我把它放在超时文件中。在完成任务之后,我不知道发生了什么。总结第一个应用程序工作正常,第二个不正常。您能支持吗?

这是太多的代码,任何人都读不懂。你应该发布一个小的,完整的重现你的问题。我认为代码要少一些。正在等待您的反馈。对主题有任何反馈吗?
 namespace SOAP_testing
    {
        class Program
        {
          ..................    
            static void Main(string[] args)
            {
                Console.WriteLine("Starting the program at: " + DateTime.Now);
                //Create Server
                Server SAMaddress= new Server { ServerIP = @"http://10.134.211.11:5673/xmlrequest/" };
                .......

      //Synchronized way <-----------------------------------------------------------
                Execute(READYTOTEST, DONEFILE, item.LSPPathName, IO.TimeOutFP, SAMaddress);


                .................
                Console.WriteLine("Ends " + i + " from" + inventory.Count);


    ...........
                Console.WriteLine("Ending the program at: " + DateTime.Now);
            }



            //Create a soap webrequest to [Url]
            public static HttpWebRequest CreateWebRequest(string ServerIP)
            {
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(ServerIP);
                webRequest.Headers.Add(@"SOAP:Action");
                webRequest.ContentType = "text/xml;charset=\"utf-8\"";
                webRequest.Accept = "text/xml";
                webRequest.Method = "POST";
                return webRequest;
            }

            public static void Execute(string xmlFileRequest, string xmlFileResult, string InventoryElement, string TimeOutFile, Server server)
            {
                HttpWebRequest request = CreateWebRequest(server.ServerIP);
                var soapEnvelopeXml = new XmlDocument();
                soapEnvelopeXml.Load(xmlFileRequest);
                using (Stream stream = request.GetRequestStream())
                {
                    soapEnvelopeXml.Save(stream);
                }
                try
                {
                    using (WebResponse response = request.GetResponse())

                    {
                        using (var rd = new StreamReader(response.GetResponseStream()))
                        {
                            string soapResult = rd.ReadToEnd();

                            var xdoc = new XmlDocument();
                            xdoc.LoadXml(soapResult);
                            xdoc.Save(xmlFileResult);
                        }
                    }
                }
                catch (WebException e)
                {
                    using (StreamWriter sw = File.AppendText(TimeOutFile))
                    {
                        sw.WriteLine(InventoryElement);
                    }
                }
            }

          ...............
}
     .......
        namespace SOAP_testing
        {
            class Program
            {

                static object locker = new object();   <----------locker added
        ................  

                public class MakeRequest
                {
                    public string file_READYTOTEST { get; set; }
                    public string file_DONEFILE { get; set; }
                    public string Inventory_name { get; set; }
                    public string  TimeOutFP { get; set; }
                    public Server server { get; set; }
                }

                static void Main(string[] args)
                {
                  ..................

                    var makeRequestList = new List<MakeRequest>();
                    int i = 0;
                    foreach (var item in inventory)
                    {
                        i++;

                        //Place inventory item to file .._READYTOTEST and save it in Output directory
                        PutElementToLspPingTest(IO.LSPReqTemplFP, IO.OutputDir, item.LSPPathName, IO.TimeOutFP);

                        string file = item.LSPPathName;
                        file = file.Remove(0, 4);
                        string READYTOTEST = IO.OutputDir + file + "_READYTOTEST" + ".xml";
                        string DONEFILE = IO.OutputDir + file + "_DONE" + ".xml";

                        makeRequestList.Add(new MakeRequest { file_DONEFILE = DONEFILE, file_READYTOTEST = READYTOTEST, Inventory_name = file, server = SAMaddress, TimeOutFP = IO.TimeOutFP } );
                    }

// NEW - task implementation
                    List<Task> mytasks = new List<Task>();
                    foreach (MakeRequest item in makeRequestList)
                    {

                        Task myFirstTask = Task.Factory.StartNew(() => Execute(item.file_READYTOTEST, item.file_DONEFILE, item.Inventory_name, IO.TimeOutFP, item.server) );
                        mytasks.Add(myFirstTask);
                    }

                    Task.WaitAll(mytasks.ToArray());


                   Console.WriteLine("Ends " + i + " from" + inventory.Count);


        .....
                }

        .....



                public static void Execute(string xmlFileRequest, string xmlFileResult, string InventoryElement, string TimeOutFile, Server server)
                {
                    HttpWebRequest request = CreateWebRequest(server.ServerIP);
                    var soapEnvelopeXml = new XmlDocument();
                    soapEnvelopeXml.Load(xmlFileRequest);

                        using (Stream stream = request.GetRequestStream())
                        {
                            soapEnvelopeXml.Save(stream);
                        }   
                    try
                    {
                        using (WebResponse response = request.GetResponse())
                        {
                            using (var rd = new StreamReader(response.GetResponseStream()))
                            {
                                string soapResult = rd.ReadToEnd();

                                var xdoc = new XmlDocument();
                                xdoc.LoadXml(soapResult);
                                xdoc.Save(xmlFileResult);
                            }
                        }
                    }
                    catch (WebException e)
                    {
                        lock (locker)  <-----locker added
                       {
                            using (StreamWriter sw = File.AppendText(TimeOutFile))
                            {
                                sw.WriteLine(InventoryElement);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }


       .......................
                }
            }
        }
using (WebResponse response = request.GetResponse())