由于使用 Exchange Web Services 2010 有点荒谬,尤其是从 .NET 以外的任何东西中,我的任务是在 SOAP Web 服务中包装一些功能,作为其他语言与我们的 Exchange 交互的传递环境。
[杂项] <-(SOAP)-> ASP.NET ASMX Web 服务<-(EWS 托管 API)-> Exchange2010
为了不要求用户为每个操作输入密码,我们使用模拟帐户,因此我们只需要我们要修改的帐户的帐户名。
这一切都很好。使用其中一个模拟帐户。模拟帐户与 api 密钥具有 1:1 的关系,以方便审计。我们设置的其他模拟帐户似乎与工作帐户完全相同,但名称和密码不同,但当我们尝试从 EWS 托管 API 使用它们时,我们会收到以下错误:
请求失败。远程服务器返回错误:(401) Unauthorized。
堆栈跟踪:
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.InternalExecute()
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder(FolderId folderId, PropertySet propertySet)
at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder[TFolder](FolderId folderId, PropertySet propertySet)
at Microsoft.Exchange.WebServices.Data.Folder.Bind(ExchangeService service, FolderId id, PropertySet propertySet)
at Microsoft.Exchange.WebServices.Data.Folder.Bind(ExchangeService service, WellKnownFolderName name)
at WhartonEWS.GetEmailUnreadCount(String apiKey, String emlUserAddress) in c:\workspace\dotnet\EWS\v1\App_Code\EWS.cs:line 357
正如我所说,当使用与某个其他模拟帐户对应的 API 密钥时,同样的代码可以正常工作;如果我将非工作 api 密钥设置为使用工作模拟帐户,则 api 密钥开始工作。
由于一个帐户有效而另一个帐户无效,我认为这意味着问题不在于我的 Web 服务代码,而在于模拟帐户设置或存在于 Web 和 Exchange 服务器之间的某种配置。但如果是服务器之间的配置,我认为这会阻止所有帐户工作。
同时,我认为我们有一些非常称职的交易所管理员,其中至少有两个人查看了模拟账户并得出结论认为他们不是问题所在。
我们可以从这里去哪里?我想一种可能的解决方案是通过工作模拟帐户引导所有请求并处理审计影响,但如果我们可以避免这种情况,我们愿意这样做。有任何想法吗?