我正在编写一个程序,使用C#中的EWS从Exchange服务器转储大量邮箱的内容。使用fiddler我注意到我发送的每个请求都建立了一个新的连接(隧道),并且正在进行新的身份验证过程(使用协商)。每次请求都会调用我的ServerCertificateValidationCallback。
如果我在Fiddler中启用选项以“重用服务器连接”,那么只在握手期间创建连接,并且重新用于所有请求(节省大量时间)。
通过获取EWS源并修改我发现的请求,如果我在请求对象上启用“UnsafeAuthenticatedConnectionSharing”而不是重新连接(额外的隧道和ServerCertificateValidationCallbacks消失),但每个请求仍然需要完整的握手身份验证。这是因为当我尝试使用交换cookie时,服务器会发回401。
有什么方法可以重新使用我的服务器连接&认证吗
public class EwsExchange
{
static int Main(string[] args)
{
sslCertCheckCount = 0;
ServicePointManager.ServerCertificateValidationCallback = ServerCertificateValidation;
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.Credentials = new NetworkCredential(args[1], args[2]);
service.Url = new Uri(args[0] + @"/EWS/exchange.asmx");
service.KeepAlive = true;
service.PreAuthenticate = true;
//service.UnsafeAuthenticatedConnectionSharing = true;
Folder folder = Folder.Bind(service, WellKnownFolderName.Inbox, new PropertySet(FolderSchema.Id, FolderSchema.DisplayName));
FindItemsResults<Item> res = folder.FindItems(new ItemView(int.MaxValue));
return 0;
}
public static bool ServerCertificateValidation(Object obj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
{
Console.WriteLine(String.Format(" ****************** ServerCertificateValidation - count: {0}. ****************** ", ++sslCertCheckCount));
return true;
}
static int sslCertCheckCount;
}
谢谢!
答案 0 :(得分:0)
事实证明,在我修改EWS API以允许我在HttpRequests上启用UnsafeAuthenticatedConnectionSharing后,我的连接和身份验证实际上正在被重用。
在禁用“工具 - &gt; Fiddler选项 - &gt;连接 - &gt;重用服务器连接”选项后,Fiddler放弃了我的连接。在Exchange服务器计算机上运行wireshark显示当fiddler在禁用此选项的情况下捕获时,正在设置FIN TCP标志,从而结束会话。但没有提琴手捕捉连接和会话都被重复使用。