2015-05-11 2 views
2

Я пишу программу для сброса содержимого многочисленных почтовых ящиков с сервера Exchange с использованием EWS на C#. Используя скрипач, я заметил, что каждый отправленный запрос делает новое соединение (туннель) с новым процессом аутентификации (с использованием согласования). Мой ServerCertificateValidationCallback вызывается для каждого запроса.Повторное использование соединения EWS и согласование подлинности для Exchange

Если я включил опцию в Fiddler, чтобы «повторно использовать соединения с сервером», чем соединение создается только во время установления связи и повторно используется для всех запросов (экономя много времени).

Получая источник EWS и изменение запросов, которые я нашел, если включить «UnsafeAuthenticatedConnectionSharing» на объектах запроса, чем соединение повторно используется (дополнительные туннели & ServerCertificateValidationCallbacks исчезают), но каждый запрос по-прежнему требует полной аутентификации квитирования. Это связано с тем, что сервер отправляет обратно 401, когда я пытаюсь использовать cookie-обмен.

Возможно ли повторное использование моего подключения к серверу &?

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

Привет и добро пожаловать! Вы должны взять [тур] (http://stackoverflow.com/tour), если вы еще этого не сделали, и я бы рекомендовал прочитать, как предоставить [ясный и минимальный] (http://stackoverflow.com/ help/mcve). Ваш код довольно длинный, и havign минимальный пример поможет! – Docteur

ответ

0

Получается, что после того, как я изменил API EWS, чтобы разрешить мне включить UnsafeAuthenticatedConnectionSharing в HttpRequests, мое соединение и аутентификация фактически были повторно использованы.

Fiddler был одним из моих соединений после того, как я отключил опцию «Инструменты -> Параметры Fiddler -> Соединения -> Соединения повторного использования сервера». Запуск wirehark на сервере обменного сервера показал, что, когда fiddler захватывал эту опцию, флажок FIN TCP устанавливался, заканчивая сеанс. Но без скрипача, захватившего соединение, сеансы & были повторно использованы.

Смежные вопросы