C#.NETWebアプリケーションに単純な一方向のWebサービスがあります。指定されたURLから画像をダウンロードして、サーバーに保存する必要があります。
ただし、サービスを呼び出すたびに、完全に機能します。また、webClient.DownloadFile行で「スレッドが中止されました」という例外が発生することもあります。
WebClientがHttpContext.Currentへのアクセスを必要とするhttpWebRequestを使用していることを読みました。これは本当ですか?もしそうなら、なぜそれは文字通り、1回おきにそれにアクセスできるのですか?
電話をかける前に、次の行を追加してみました。
WebService service = new WebService();
HttpContext.Current = service.Context;
しかし、それは違いを生みません。
サービスを10回実行しました。結果は次のとおりです。
1:成功
2:例外:スレッドが中止されていました。スタックトレース:System.Net.ConnectStream.Read(Byte []バッファー、Int32オフセット、Int32サイズ)at System.Net.WebClient.DownloadBitsState.RetrieveBytes(Int32&bytesRetrieved)at System.Net.WebClient.DownloadBits(WebRequest request、Stream writeStream、CompletionDelegate completeDelegate、AsyncOperation asyncOp)at System.Net.WebClient.DownloadFile(Uri address、String fileName).. ..
3:成功
4:例外:スレッドが中止されていました。スタックトレース:System.Net.ConnectStream.Read(Byte []バッファー、Int32オフセット、Int32サイズ)at System.Net.WebClient.DownloadBitsState.RetrieveBytes(Int32&bytesRetrieved)at System.Net.WebClient.DownloadBits(WebRequest request、Stream writeStream、CompletionDelegate completeDelegate、AsyncOperation asyncOp)at System.Net.WebClient.DownloadFile(Uri address、String fileName).. ..
5:成功
6:例外:スレッドが中止されていました。スタックトレース:System.Net.WebClient.DownloadBitsState.SetResponse(WebResponse response)at System.Net.WebClient.DownloadBits(WebRequest request、Stream writeStream、CompletionDelegate completeDelegate、AsyncOperation asyncOp)at System.Net.WebClient.DownloadFile(URI address、文字列fileName)..。
7:成功
8:例外:スレッドが中止されていました。スタックトレース:System.Net.WebClient.DownloadBitsState.SetResponse(WebResponse response)at System.Net.WebClient.DownloadBits(WebRequest request、Stream writeStream、CompletionDelegate completeDelegate、AsyncOperation asyncOp)at System.Net.WebClient.DownloadFile(URI address、文字列fileName)..。
9:成功
10:例外:スレッドが中止されていました。スタックトレース:System.Net.WebClient.DownloadBitsState.SetResponse(WebResponse response)at System.Net.WebClient.DownloadBits(WebRequest request、Stream writeStream、CompletionDelegate completeDelegate、AsyncOperation asyncOp)at System.Net.WebClient.DownloadFile(URI address、文字列fileName)..。
これを機能させる方法はありますか?
編集:投稿コードに関する質問への回答:投稿するものはあまりありません。それはすべて非常に簡単です。
[WebService(Namespace = "http://nerdliness.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
[System.ComponentModel.ToolboxItem(false)]
public class FileProcessor : System.Web.Services.WebService
{
[WebMethod]
[SoapDocumentMethod(OneWay = true)]
public void ParseFile(String urlOfFileToGrab, String destinationPath)
{
try
{
WebClient client = new WebClient();
client.DownloadFile(urlOfFileToGrab, destinationPath);
client.Dispose();
}
catch (Exception ex)
{
//Log it
}
}
}