我有一个Windows服务应用程序,它将一些消息发送到另一个Web服务(实习生作为电子邮件发送)并从服务器下载响应。
最近,服务在几天内停止了一次。 (尽管包含异常处理仍然没有被捕获并且服务崩溃)。
登录事件查看器的异常如下:
框架版本:v4.0.30319描述:该过程已终止 由于未处理的异常。异常信息:System.Net.WebException 堆栈:at System.Net.ServicePointManager.FindServicePoint(的System.Uri, System.Net.IWebProxy,System.Net.ProxyChain ByRef, System.Net.HttpAbortDelegate ByRef,Int32 ByRef)at System.Net.HttpWebRequest.FindServicePoint(Boolean)at System.Net.HttpWebRequest.get_ServicePoint()at System.Net.AuthenticationState.PrepareState(System.Net.HttpWebRequest) 在 System.Net.AuthenticationState.ClearSession(System.Net.HttpWebRequest) 在System.Net.HttpWebRequest.ClearAuthenticatedConnectionResources()
在System.Net.HttpWebRequest.Abort(System.Exception,Int32)at System.Net.HttpWebRequest.AbortWrapper(System.Object)at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在System.Threading.ThreadPoolWorkQueue.Dispatch()at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
我搜索了很多但找不到合适的答案。 任何帮助,将不胜感激。使用的代码:
public class DataAPIWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = 60000;
return w;
}
}
public string Send(string path)
{
try
{
using (DataAPIWebClient webClient = new DataAPIWebClient())
{
webClient.Credentials = new NetworkCredential("XXX", "YYY");
string reply = webClient.DownloadString(path);
return reply;
}
}
catch (WebException)
{
throw;
}
}
答案 0 :(得分:4)
这是你的问题
catch (WebException)
{
throw;
}
你只是重新抛出你的异常,它永远不会被抓住,你永远不知道错误是什么,所以服务别无选择,只能崩溃
我可以建议
catch (WebException ex)
{
Log.Error(ex);
// Or write it to a file or something
}
编辑:正如评论中所述,这不是解决方案, 但是你错过了那个堆栈中的实际异常消息 由于未捕获的异常导致的痕迹,然而它的未被捕获 导致服务崩溃的异常