2013-03-27 39 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

相關問題