私はVS2010、FrameWork 4.0でC#を使用しています。 私は2つのHttp-Postコールを順番に行うコンソールアプリケーションを作成しました。 2番目の呼び出しは、最初の呼び出しによって返されるものを入力に使用します。 まあ、アプリケーションをデバッグモードで、ブレークポイントを使って段階的に(F10)実行すると、すべて正常に動作します。 しかし、ブレークポイントを削除して "F5"を押すと、エラーが約60秒かかるため、タイムアウトのために、コードが "webRequest.getResponse()"をSECOND Http-Post呼び出しで実行すると例外が発生します現れる。HttpPostで "getResponse()"を2回使用すると、ステップバイステップでしかデバッグできません
例外:ErrorCode 10054 - リモートホストによって強制的に接続が閉じられました。
これは、(コンソールアプリケーションは、「検索」メソッドを呼び出す)私のアプリケーションで使用するクラスです。
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Net;
using System.IO;
namespace MyNamespace
{
public class MyClass
{
private string SearchId { get; set; }
private string XmlOutputSearch { get; set; }
public MyClass()
{
SearchId = "";
XmlOutputSearch = "";
}
public string Search()
{
StartSearch();
CheckResults();
return XmlOutputSearch;
}
public void StartSearch()
{
string sInput = "[myStartSearchXmlRequest]";
string sOutput = HttpPost(sInput);
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.LoadXml(sOutput);
SearchId = myXmlDoc.SelectSingleNode("//SearchId").InnerXml;
}
public void CheckResults()
{
string sInput = "[myCheckResultsXmlRequest using SearchId]";
XmlOutputSearch = HttpPost(sInput);
}
private string HttpPost(string parameters)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("[myURI]");
webRequest.ContentType = "text/xml";
webRequest.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(parameters);
Stream os = null;
try
{ // send the Post
webRequest.ContentLength = bytes.Length; //Count bytes to send
os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length); //Send it
}
catch (WebException ex)
{
throw ex;
}
finally
{
if (os != null)
{
os.Close();
}
}
try
{ // get the response
// Here I get the exception, on webRequest.GetResponse(), when HttpPost is called
// by CheckResults, if not in Step-By-Step mode
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
if (webResponse == null)
{ return null; }
StreamReader sr = new StreamReader(webResponse.GetResponseStream());
string sReturn = sr.ReadToEnd().Trim();
sr.Close();
webResponse.Close();
webRequest.Abort();
return sReturn;
}
}
catch (WebException wex)
{
// This exception will be raised if the server didn't return 200 - OK
// Try to retrieve more information about the network error
if (wex.Response != null)
{
using (HttpWebResponse errorResponse = (HttpWebResponse)wex.Response)
{
Console.WriteLine(
"The server returned '{0}' with the status code {1} ({2:d}).",
errorResponse.StatusDescription, errorResponse.StatusCode,
errorResponse.StatusCode);
}
}
}
}
catch (Exception excep)
{
Console.WriteLine("Exception in WebResponse. " + excep.Message + " - " + excep.StackTrace);
}
return null;
} // end HttpPost
}
}
あなたが本当に 'webRequest.Abort()を呼び出すことする必要がありますか;'? –