【发布时间】:2014-12-19 18:46:01
【问题描述】:
所以我设置了相同的 Exchange 网络服务示例:
作为控制台应用程序运行的 C# 版本:
class Program
{
static void Main(string[] args)
{
var es = new ExchangeService(ExchangeVersion.Exchange2010_SP2)
{
TraceEnabled = true,
UseDefaultCredentials = true,
Url = new Uri("https://mail.myServer.com/EWS/Exchange.asmx")
};
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
var inboxId = new FolderId(WellKnownFolderName.Inbox);
Folder inboxFolder = null;
try
{
inboxFolder = Folder.Bind(es, inboxId);
} catch(Exception e)
{
Console.Out.WriteLine(e.Message);
}
if (inboxFolder == null)
{
Console.Out.WriteLine("FAILED");
return;
}
Console.Out.WriteLine("Total stuff: [{0}]", inboxFolder.TotalCount);
Console.In.ReadLine();
}
}
Powershell 版本:
clear
# Load EWS Managed API
Import-Module "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll";
$EWSService = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2)
$EWSService.traceenabled = $true
$EWSService.UseDefaultCredentials = $true
$EWSService.Url = New-Object Uri("https://mail.myServer.com/EWS/Exchange.asmx")
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true };
$InboxID = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
Try {$InboxFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($EWSservice,$InboxID)}
Catch [Exception] {
Write-Host $_.Exception.Message
}
两者都在同一台机器上运行,同一用户。控制台应用程序连接并返回数据。 powershell 版本收到一条非常有用的消息:
The request failed. The underlying connection was closed: An unexpected error occurred on a send.
检查异常不会提供任何额外的信息。两个版本都引用相同的 EWS 托管 API。有人知道为什么会这样吗?
【问题讨论】:
-
我不是 EWS 的专家,但 [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true };看起来格格不入。我只看到在使用 AutoDiscover 查找 Exchange 服务器时使用它,但您的服务器名称已经硬编码在 URI 中。
-
根据我对它的使用情况的解读,这用于在服务器使用未签名证书时忽略证书错误。即使我对此错了,代码在 .NET 中而不是在 powershell 中工作,所以无论哪种方式回调都不应该是问题(只是为了确保我尝试了两者)。
-
我今天遇到了同样的问题。我注意到标准 Windows PowerShell 控制台和 SharePoint 2013 PowerShell 控制台中的行为不同。特别是,here 描述的解决方案适用于 Windows PowerShell,但不适用于 SharePoint 之一。请注意,链接似乎已损坏,我从 Google 缓存中提取了该页面。
标签: powershell exchange-server exchangewebservices