我正在使用 EWS 为订阅新邮件通知的 C# 客户端提供服务。我认为目前我们的环境中有 4 个客户端访问服务器。如果我使用自动发现来查找正确的 CAS,我经常会得到错误的 CAS。我知道它什么时候选错了,因为如果我给自己发一封电子邮件(这应该会触发新邮件通知),我的客户端永远不会收到通知。如果我硬编码我希望连接到哪个 CAS(这是我的猜谜游戏),我可以让通知工作一段时间(时间不确定),但是当邮箱移动客户端访问服务器时,它会停止工作。我正在使用InternalEwsUrl
。这是一台完全修补的 Exchange 2010 SP1 服务器。
查看堆栈跟踪,我发现它正确找到了优先级为 1 的所有 4 个客户端访问服务器。它始终选择最顶层的 CAS(假设这是默认行为),但这往往是不正确的。
知道为什么我不能总是解决正确的 CAS 吗?
注意:我是开发人员,而不是系统管理员,所以如果我说的某些内容没有意义或需要澄清,请告诉我。
答案1
在 Exchange 命令行管理程序中,键入
Get-ExchangeServer
Get-Mailbox [user] | fl Database
这将告诉您有多少个 Exchange 服务器、安装了哪些角色以及它们属于哪个站点。第二个命令将告诉您当前所在的数据库。自动发现将查找任何邮箱服务器的 Active Directory 站点中的 CAS(您连接的 CAS 必须位于同一站点)。您需要检查几件事。
SCP 对于每个 CAS 都是正确的。如果它是那站点,它应该指向它自己,否则它应该是负载均衡器名称(VIP)。
Get-ClientAccessServer | fl AutoDiscoverServiceInternalUri
站点内每个数据库的 RPCClientAccessServer 都应指向前面提到的 CAS/Array。
Get-MailboxDatabase | fl Server,Database,RPC*
站点中每个 CAS 的 EWS 内部 URL 也应指向相同的 CAS/Array。还要验证 EWS 虚拟目录上的设置对于每个服务器是否相同。由于站点中的任何 CAS 都可以满足您的请求,因此 EWS 可能只是针对特定服务器进行了错误配置。
Get-WebServicesVirtualDirectory | fl Identity,*auth*,*URL