发布照片时Facebook C#sdk随机异常

时间:2013-03-27 22:54:12

标签: windows-services facebook-c#-sdk unhandled-exception

我使用Facebook C#sdk使用Windows服务作为后台作业将照片上传到用户配置文件。而且我几乎在每个我能想到的地方记录异常,而且大多数情况下它工作正常。但偶尔,有时候它很频繁,我得到以下异常,它不会被我的处理程序捕获,并被Windows事件记录器记录,并终止我的服务:

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'以捕获这些意外异常的信息。这会阻止我的服务终止,使用它是否是个好主意?对不起,如果我一口气问了太多问题,但这些都是相关的,谷歌到目前为止还不是我的朋友。 感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

2个月过去而且没有一个答案,所以我会发布我所做的事情以防止这个问题对其他人有用。仍然不知道崩溃的主要原因,但它偶尔,所以使用标志“legacyUnhandledExceptionPolicy”到目前为止,没有意外的终止。需要在配置文件中启用该标志:

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

此处有更好的解释:MSDN Reference