C# 在ASP.NET下,Exchange Web服务(EWS)调用失败,但不是控制台应用程序

C# 在ASP.NET下,Exchange Web服务(EWS)调用失败,但不是控制台应用程序,c#,exchange-server,exchangewebservices,C#,Exchange Server,Exchangewebservices,尝试通过ASP.NET连接到Exchange Web服务时出错 如果我通过控制台应用程序调用它,下面的代码可以工作,但在ASP.NET web表单页面上执行时,同样的代码会失败。作为旁注,我在整个代码示例中使用自己的凭据 当以没有邮箱的帐户进行请求时,必须为任何可分辨文件夹ID指定邮箱主SMTP地址 我想我可以通过指定一个模拟用户来解决这个问题 exchangeservice.ImpersonatedUserId = new ImpersonatedUserId(ConnectingI

尝试通过ASP.NET连接到Exchange Web服务时出错

如果我通过控制台应用程序调用它,下面的代码可以工作,但在ASP.NET web表单页面上执行时,同样的代码会失败。作为旁注,我在整个代码示例中使用自己的凭据

当以没有邮箱的帐户进行请求时,必须为任何可分辨文件夹ID指定邮箱主SMTP地址

我想我可以通过指定一个模拟用户来解决这个问题

exchangeservice.ImpersonatedUserId = 
    new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "email@domain.com");
但是我得到了一个不同的错误

“该帐户没有模拟请求用户的权限。”

运行web应用程序的应用程序池也是我自己的帐户(与控制台应用程序相同),因此我不知道是什么导致了此问题

我使用的是.NETFramework 3.5

这是完整的代码

var exchangeservice =
                        new ExchangeService(ExchangeVersion.Exchange2010_SP1)
                        {
                            Timeout = 10000
                        };

 var credentials = new System.Net.NetworkCredential("username", "pass", "domain");


exchangeservice.AutodiscoverUrl("email@domain.com")

FolderId rootFolderId = new FolderId(WellKnownFolderName.Inbox);

var folderView = new FolderView(100)
            {
                Traversal = FolderTraversal.Shallow
            };

            FindFoldersResults findFoldersResults =
                service.FindFolders(rootFolderId, folderView);

您是否已尝试直接针对服务设置凭据

this.exchangeService.Credentials = new WebCredentials("username", "pass");

this.exchangeService.AutodiscoverUrl("username", this.RedirectionUrlValidationCallback);
并将其用作验证回调

    /// <summary>
    /// Redirections the URL validation callback.
    /// </summary>
    /// <param name="redirectionUrl">The redirection URL.</param>
    /// <returns>true if https</returns>
    private bool RedirectionUrlValidationCallback(string redirectionUrl)
    {
        // The default for the validation callback is to reject the URL.
        var result = false;

        var redirectionUri = new Uri(redirectionUrl);

        // Validate the contents of the redirection URL. In this simple validation
        // callback, the redirection URL is considered valid if it is using HTTPS
        // to encrypt the authentication credentials. 
        if (redirectionUri.Scheme == "https")
        {
            result = true;
        }

        return result;
    }
//
///重定向URL验证回调。
/// 
///重定向URL。
///如果为https,则为true
私有bool重定向UrlValidationCallback(字符串重定向URL)
{
//验证回调的默认值是拒绝URL。
var结果=假;
var redirectionUri=新Uri(redirectionUrl);
//验证重定向URL的内容
//如果使用HTTPS,则重定向URL被视为有效
//加密身份验证凭据。
if(redirectionUri.Scheme==“https”)
{
结果=真;
}
返回结果;
}

检查凭据,查看用户是否有足够的权限进行模拟。检查EWS限制策略并提供正确的权限可以解决此问题。

在两种环境下运行服务时,针对服务设置的url是否匹配?您是否确认如果在同一web服务器上执行console应用程序,该应用程序可以工作?例如,您的web服务器和exchange服务器之间是否存在连接障碍?这是我的本地开发框,因此我看不到任何连接问题阻碍我。@RichAndrews我没有在任何地方指定URL,AutoDiscoveryURL()正在为我做所有这些。我意识到,但是,如果在自动发现之后放置断点,则可以将“发现的”url视为服务中的属性。我在autodiscover中遇到一些问题,在某些环境中,它解析到的代理不正确。这可能没有帮助,但最好检查它是否将您连接到同一端点