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())