401 Несанкционированный возврат на EndGetResponse. Журнал ошибок Apache: не может сгенерировать контекст - PullRequest
1 голос
/ 29 сентября 2011

Я получил сервер с работающим Apache. Теперь я хочу иметь возможность читать содержимое папки там, и для этого эта папка настроена в Apache httpd.conf примерно так:

Alias /folder "E:/Folder"

<Directory "E:/Folder">
  AuthName "Public Folder"
  AuthType SSPI
  SSPIAuth On
  SSPIAuthoritative On
  SSPIDomain DOMAIN
  SSPIOfferBasic On
  SSPIOfferSSPI On
  SSPIBasicPreferred Off
  SSPIOmitDomain On
  SSPIUsernameCase lower
  require group "DOMAIN\Domain Users"
</Directory>

Теперь, когда я использую браузер, я уже могу получить доступ к этой информации с помощью URL http://ServerName/Folder/

Так что это уже отлично работает. Но сейчас я пытаюсь получить эти данные папки для моего приложения на C #. Я использую DefaultNetworkCredentials, и мой код выглядит примерно так:

public void CheckFolder()
{
    WebRequest request = HttpWebRequest.Create(_uri);
    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.BeginGetResponse(new AsyncCallback(HandleGetAvailableUpdates), request);
}

void HandleGetAvailableUpdates(IAsyncResult state)
{
    try
    {
        if (state.IsCompleted)
        {
            WebRequest req = state.AsyncState as WebRequest;
            WebResponse response = req.EndGetResponse(state);
            Stream wStream = null;
            wStream = response.GetResponseStream();
            byte[] data = new byte[response.ContentLength];

            etc.
            .
            .
            .

        }
        catch (WebException ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

req.EndGetResponse (состояние) теперь генерирует исключение WebException:

The remote server returned an error: (401) Unauthorized.

Возвращаясь к серверной части. Я смотрю на Apache error.log и там нахожу:

(OS 87)The parameter is incorrect.  : authentication failure for "/folder": user unknown, reason: cannot generate context

Эта функция Программы уже хорошо работала около двух месяцев назад. Код C # вообще не изменился, но я не знаю, было ли что-то сделано с сервером или с конфигурацией Apache. Я также попытался передать свои учетные данные (имя пользователя и pw, то же самое, что я использую при доступе через веб-браузер) вручную в C # -коде, а не используя DefaultNetworkCredentials, но безрезультатно. Итак, наконец, мой вопрос будет: я что-то забыл? Есть ли какие-либо другие настройки на сервере, которые необходимо выполнить, чтобы он работал?

1 Ответ

0 голосов
/ 29 сентября 2011

Самый простой способ узнать: Пользовательский Fiddler, Live Http Headers или любой другой анализатор HTTP-пакетов, чтобы увидеть, какие заголовки / параметры публикации отправляются браузером, а затем продублировать все из них программно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...