401 не авторизован: не удается проверить подлинность и прочитать входящие сообщения в Exchange 2003 с C # и WebDav - PullRequest
0 голосов
/ 13 декабря 2011

Это озадачивает меня.У меня есть два сервера обмена.Тот, который я могу прочитать просто отлично, другой я не могу.У первого есть SSL, у второго нет.

Подключение и чтение определенной папки «Входящие» на сервере SSL с надлежащими учетными данными для этой папки «Входящие» РАБОТАЕТ.Мое соединение выглядит следующим образом:

destination=https://myssqlserver.myorg.com/exchange/fish/Inbox&username=myorg.com\fish&password=FishPassword&SubmitCreds=Log+On&forcedownlevel=0&trusted=0

Эта та же самая вещь (тот же самый точный код) терпит неудачу, когда я пытаюсь подключиться к коробке NON-SSL и читать из другой папки «Входящие» (для которой у меня также есть учетные данные)

destination=http://mynonsslserver.myorg.com/exchange/mammel/Inbox&username=myorg.com\mammel&password=MammelPassword&SubmitCreds=Log+On&forcedownlevel=0&trusted=0

Что странно, если я просто беру информацию о подключении без SSL и набираю его в URL для IE, он запрашивает имя пользователя и пароль, и я могу нормально видеть папку «Входящие» через OWA.

http://mynonsslserver.myorg.com/exchange/mammel/Inbox/?username=myorg.com\mammel&password=MammelPassword

Так почему я не могу работать на сервере без SSL с этой настройкой?Я не понимаю

Вот мой код аутентификации.Сбой на линии, где предполагается получить ответ:

public void Authenticate()
    {

      // Create the web request body:
      var credentials = "destination={0}&username={1}\\{2}&" + "password={3}&SubmitCreds=Log+On&forcedownlevel=0&trusted=0";
      var body = string.Format(credentials, _uri, _domain, _conn.Username, _conn.Password);
      var bytes = Encoding.UTF8.GetBytes(body);

      // Create the web request:
      var request = (HttpWebRequest)WebRequest.Create(_conn.AuthURI);
      request.Method = "POST";
      request.ContentType = "application/x-www-form-urlencoded";
      request.CookieContainer = new CookieContainer();
      request.ContentLength = bytes.Length;

      // Create the web request content stream:
      using (var stream = request.GetRequestStream())
      {
        stream.Write(bytes, 0, bytes.Length);
        stream.Close();
      }

      // Get the response & store the authentication cookies:
      // THIS LINE FAILS
      var response = (HttpWebResponse) request.GetResponse();

      if (response.Cookies.Count < 2)
        throw new AuthenticationException("Login failed. Is the login / password correct?");

      _cookieContainer = new CookieContainer();
      _cookies = new CookieCollection();
      foreach (Cookie myCookie in response.Cookies)
      {
        _cookieContainer.Add(myCookie);
        _cookies.Add(myCookie);
      }

      response.Close();

      Console.WriteLine("----------------- AUTH REQUEST COMPLETE -----------------");
    }
...