Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理WebServices.Data.ServiceRequestException?_Service_Exchangewebservices - Fatal编程技术网

如何处理WebServices.Data.ServiceRequestException?

如何处理WebServices.Data.ServiceRequestException?,service,exchangewebservices,Service,Exchangewebservices,我有一个Windows服务,可以定期访问邮箱,通过EWS处理新电子邮件 在启动并运行了几天后,它遇到了以下错误,导致服务停止。(类似Exchange服务的服务不可用) 我仍在调查错误是否只是暂时的,因为我仍在与其他团队共享的开发环境中,这些团队可能正在执行导致此错误的实现 问题:我是否可以知道处理此问题的最佳方法是使用try catch,其中catch将在我的主程序中再次运行GetNewEmail方法 下面是我的代码片段: List<EmailMessage> emailList

我有一个Windows服务,可以定期访问邮箱,通过
EWS
处理新电子邮件

在启动并运行了几天后,它遇到了以下错误,导致服务停止。(类似Exchange服务的服务不可用)

我仍在调查错误是否只是暂时的,因为我仍在与其他团队共享的开发环境中,这些团队可能正在执行导致此错误的实现


问题:我是否可以知道处理此问题的最佳方法是使用
try catch
,其中
catch
将在我的主程序中再次运行
GetNewEmail
方法


下面是我的代码片段:

List<EmailMessage> emailList = GetNewEmail(category);

public static List<EmailMessage> GetNewEmail(string folderName)
{
    FindItemsResults<Item> emailItemList;
    List<EmailMessage> retrievedEmailList = new List<EmailMessage>();
    int offset = 0;
    bool MoreItems = true;
    const int pageSize = 9999;

    if (service != null)
    {
        try
        {
            InitExchangeService();

            SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
            FolderView fView = new FolderView(1000);
            fView.Traversal = FolderTraversal.Deep;

            //error hit at the following line
            FindFoldersResults findFolderResults = service.FindFolders(
                WellKnownFolderName.Inbox,
                new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep });

            if (findFolderResults.Folders.Count == 0)
            {
                AppLogger.LogInfo("No folders found in Inbox.");
                return retrievedEmailList;
            }

            else
            {
                foreach (Microsoft.Exchange.WebServices.Data.Folder folder in findFolderResults.Folders)
                {
                    if (folder.DisplayName == folderName)
                    {
                        while (MoreItems)
                        {
                            ItemView view = new ItemView(pageSize, offset, OffsetBasePoint.Beginning);
                            emailItemList = service.FindItems(folder.Id, sf, view);

                            foreach (var emailItem in emailItemList.Items)
                            {
                                EmailMessage email = EmailMessage.Bind(service, emailItem.Id);
                                retrievedEmailList.Add((EmailMessage)email);
                            }

                            if (!emailItemList.MoreAvailable)
                                MoreItems = false;

                            if (MoreItems)
                                offset += pageSize;
                        }
                        return retrievedEmailList;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            AppLogger.LogError(ex, "");
            throw ex;
        }
    }
    return retrievedEmailList;
}
List-emailList=GetNewEmail(类别);
公共静态列表GetNewEmail(字符串folderName)
{
FindItemsResults emailItemList;
List retrievedEmailList=新列表();
整数偏移=0;
bool-moritems=true;
常量int pageSize=9999;
if(服务!=null)
{
尝试
{
InitExchangeService();
SearchFilter sf=new SearchFilter.SearchFilterCollection(LogicalOperator.And,new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead,false));
FolderView fView=新FolderView(1000);
fView.Traversal=FolderTraversal.Deep;
//在下一行命中错误
FindFoldersResults findFolderResults=service.FindFolders(
WellKnownFolderName.Inbox,
新的FolderView(int.MaxValue){Traversal=FolderTraversal.Deep});
如果(findFolderResults.Folders.Count==0)
{
LogInfo(“收件箱中找不到文件夹”);
返回检索到的电子邮件列表;
}
其他的
{
foreach(findFolderResults.Folders中的Microsoft.Exchange.WebServices.Data.Folder文件夹)
{
if(folder.DisplayName==folderName)
{
while(更多项目)
{
ItemView视图=新的ItemView(页面大小、偏移量、偏移量基点.开始);
emailItemList=service.FindItems(folder.Id,sf,view);
foreach(emailItemList.Items中的var emailItem)
{
EmailMessage email=EmailMessage.Bind(服务,emailItem.Id);
retrievedEmailList.Add((EmailMessage)电子邮件);
}
如果(!emailItemList.MoreAvailable)
MoreItems=false;
如果(更多项目)
偏移量+=页面大小;
}
返回检索到的电子邮件列表;
}
}
}
}
捕获(例外情况除外)
{
AppLogger.LogError(例如,“”);
掷骰子;
}
}
返回检索到的电子邮件列表;
}

谢谢。

因为EWS管理的API是一个客户端库,所以每当您使用将向Exchange服务器发送请求的方法时,应该在该代码周围设置一个Try-Catch块。错误可以来自客户端(例如网络、DNS、本地客户端问题),也可以来自服务器,作为一般501类型的错误,或者您接收到SOAP响应,其中包含底层服务响应错误代码,如Throttling(ServerBusy),其中有需要处理的回退。因此,如果您编写弹性代码,您的处理程序应该以不同的方式查找和处理这些异常(尽管大多数异常只需要重试,但如果您的邮箱被限制,重试间隔可能需要更改;如果邮箱在数据中心之间移动且暂时不可用,则在Office365中,重试间隔可能需要更改)