代码之家  ›  专栏  ›  技术社区  ›  Anthony Atmaram

交换401未经授权

  •  2
  • Anthony Atmaram  · 技术社区  · 14 年前

    我正在尝试连接到我们的Exchange 2007服务器。我已经放置了很多异常处理来捕获任何错误,并将它们放在应用程序日志中。首先,我有一个确保用户可以使用提供的凭证访问Exchange服务的功能:

    public bool Logon()
    {
        string pwd = /*Get password*/;
    
        try
        {
            service.Credentials = new WebCredentials(
                username + "@our.domain", pwd);
    
            service.FindItems(WellKnownFolderName.Outbox, new ItemView(1));
        }
        catch (Exception)
        {
            return false;
        }
        return true;
    }
    
    

    如果此函数返回false,则在应用程序日志中放置一个条目,报告用户登录失败,然后进程终止。

    如果函数成功,那么在下面的某个地方,我们称之为该函数;它获取用户在接下来10分钟内开始的所有约会:

    protected List GetFutureAppointments()
    {
        try
        {
            SearchFilter.IsGreaterThanOrEqualTo startTime =
                new SearchFilter.IsGreaterThanOrEqualTo(
                    AppointmentSchema.Start, DateTime.Now);
    
            SearchFilter.IsLessThanOrEqualTo endTime =
                    new SearchFilter.IsLessThanOrEqualTo(
                        AppointmentSchema.Start, DateTime.Now.AddMinutes(10));
    
            SearchFilter filter = 
                new SearchFilter.SearchFilterCollection(LogicalOperator.And,
                    new SearchFilter[] { startTime, endTime });
    
            FindItemsResults results =  
                service.FindItems(
                    WellKnownFolderName.Calendar, filter, new ItemView(10));
    
            return new List(results.Items);
        }
        catch (Exception e)
        {
            Utilities.LogException(e);
            return null;
        }
    }
    
    

    如您所见,函数将捕获所有异常并记录它们。出现在日志中的是 Request failed. The remote server returned an error: (401) Unauthorized. 堆栈跟踪指向 service.FindItems() 功能。

    所以我有点困惑,可能对Exchange或Web服务之类的东西不太了解。登录函数返回true,但稍后授权失败。有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Xavier Poinas    14 年前

    您的凭证是否允许您访问发件箱,而不是日历?