SPSite в веб-сервисе выдает ошибку 401 - PullRequest
1 голос
/ 30 июля 2009

У меня есть этот код:

using ( var site = new SPSite( myUrl ) ) {
    using ( var web = site.AllWebs[0] ) {
        // read-only operations
    }
}

"myUrl" является верхним URL домена с WSS 3.0. Аутентификация установлена ​​на Windows. Если я запускаю этот код из командной строки под учетной записью "external_app_user", все в порядке. Но если я запускаю этот код из веб-службы (вне веб-приложения WSS), то результатом будет HTTP-ответ «401 НЕСАНКЦИОНИРОВАН» вместо SOAP-ответа. Это странно, потому что этот код находится в блоке try-catch, и, если возникнет какое-либо исключение, я вернул собственное сообщение об ошибке в ответе SOAP.

Код работает на том же компьютере, что и WSS.

Если я запускаю веб-сервис из веб-браузера на компьютере, на котором работает веб-служба, отображается классическая форма входа в Windows. Если я запускаю веб-службу из веб-браузера на другом компьютере, я получаю только HTTP-ответ «401 НЕСАНКЦИОНИРОВАН».

Веб-сервис работает под правильным аккаунтом. Эта учетная запись имеет доступ к WSS (протестировано через сайт sharepoint). Если я пытаюсь получить «System.Security.Principal.WindowsIdentity.GetCurrent (). Name», возвращается правильное имя пользователя.

В web.config установлено ".

Кто-нибудь имеет представление, что не так?

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

Причина, по которой вы не можете перехватить 401, заключается в том, что в SharePoint есть настраиваемая обработка для этого исключения, см. Эту ветку: Невозможно отловить ошибку "Отказано в доступе SharePoint" (включая подсказку, как отключить его). 1003 *

1 голос
/ 30 июля 2009
1 голос
/ 30 июля 2009

В IIS можно проверить, разрешена ли анонимная проверка подлинности и проверка подлинности Windows. Тогда он может позволить вам войти в систему как анонимный пользователь, вместо того, чтобы читать вашу личность в Windows, что впоследствии приведет к несанкционированному доступу.

...