2013-03-27 71 views
0

我正在使用Facebook C#sdk将照片上传到用户配置文件使用Windows服务作为后台作业。我几乎在每个我能想到的地方都记录异常,而且大多数情况下它工作正常。但偶尔,有时还是比较频繁的,我得到下面的异常,它没有得到我的处理程序捕获,并且得到由Windows事件记录器记录下来,并终止我的服务:Facebook C#sdk发布照片时的随机异常

Application: PhotoService.exe  
Framework Version: v4.0.30319  
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.Exception  
Stack: 
at System.Net.Security._SslStream.WriteCallback(System.IAsyncResult) 
at System.Net.LazyAsyncResult.Complete(IntPtr) 
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 
at System.Net.ContextAwareResult.Complete(IntPtr) 
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32, UInt32, System.Threading.NativeOverlapped*) 
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*) 

从外观上来看它发生在FacebookClient.PostTaskAsync()方法调用中,但我不知道如何使用有限的堆栈跟踪信息进行故障排除。下面是我的照片张贴方法块:

public void PostPhotoToTimeline(string filename, byte[] photo, EventHandler<FacebookApiEventArgs> callbackCompleted) 
{ 
    var _filename = filename; 
    var mediaObject = new FacebookMediaObject 
    { 
     ContentType = "image/jpeg", 
     FileName = _filename 
    }.SetValue(photo); 

    _fb.PostCompleted += callbackCompleted; 
    var parameters = new Dictionary<string, object>(); 
    parameters["file"] = mediaObject; 

    _fb.PostTaskAsync("/me/photos", parameters); 
} 

此刻我最大的问题是,当这种异常情况发生时,终止服务,我没有业务监控设置呢,所以没办法给我发现服务已停止。如果我理解正确,这个异常发生在一个单独的线程中并且不被处理,因此它会降低整个服务。它是否正确?任何想法为什么这可能会发生,以及在哪里,或任何人面临此例外之前?我已阅读关于'legacyUnhandledExceptionPolicy'来捕获这些意外的异常。这是否会阻止我的服务终止,使用它是不是一个好主意?很抱歉,如果我一次性询问太多问题,但这些都是相关的,并且Google迄今还没有成为我的朋友。 感谢您提供任何帮助。

回答

1

2个月过去了,没有一个答案,所以我会发布我所做的,以防止可能对其他人有用的问题。仍然不知道崩溃的主要原因,但它是偶然的,所以使用标志“legacyUnhandledExceptionPolicy”迄今为止工作,没有意外的终止。该标志需要在配置文件中启用:

<runtime> 
<legacyUnhandledExceptionPolicy enabled="1"/> 
</runtime> 

更好地解释一下:MSDN Reference