Вызов пользовательского веб-сервиса SharePoint из ASP.Net AJAX выдает ошибку 403? - PullRequest
0 голосов
/ 16 марта 2010

Я разработал пользовательский веб-сервис SharePoint и развернул его в /_vti_bin/myservice.asmx. Как обычный пользователь, просмотр этого URL-адреса ASMX работает нормально. Когда я пытаюсь перейти к «/_vti_bin/myservice.asmx/js», как требуется для вызова этой службы из ASP.Net AJAX, я получаю 403. Если я обращаюсь к нему не меньше, чем администратор фермы (администратор семейства сайтов не не получается), я получаю 403. Вполне возможно, что роль администратора фермы как администратора локального сервера также позволяет ему работать.

Это мой класс веб-сервиса:

[WebService(Namespace = "http://sharepointservices.genericnamespace.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class ApprovalSvc : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
    public XmlDocument GetInboxItems(string inboxName, string s_Id)
    {
      // code removed
    }
}

Это искусство кода моей веб-части, где я подключаю ASP.Net AJAX:

ScriptManager scriptMgr = new ScriptManager();
string webUrl = SPContext.Current.Web.Url;
ServiceReference srvRef = new ServiceReference(webUrl + "/_vti_bin/ApprovalSvc.asmx");
scriptMgr.Services.Add(srvRef);
this.Controls.Add(scriptMgr);

Если я вошел в систему как администратор фермы / сервера, это работает. В противном случае нет. Сборка веб-службы находится в GAC и перечислена в SafeControls. Есть идеи?

1 Ответ

0 голосов
/ 17 марта 2010

Старый добрый Process Monitor на помощь.

Факты:

  • DLL сервисного кода находится в каталоге bin веб-приложения, так как не может быть подписана, поскольку она ссылается на неподписанные DLL.
  • Запрос на служебную библиотеку DLL поступает из ASP.Net, а не SharePoint, в частности, с HttpModule в сборке System.Web.Extensions.

Решение:

Поскольку запрос не пришел через SharePoint, и олицетворение идентичности также включено по умолчанию, разрешения NTLM по умолчанию для каталога BIN веб-приложения были недостаточно хороши - учетная запись пользователя не имела доступа к каталогу BIN или DLL внутри него.

Мы предоставили NT AUTHORITY \ Authenticated Users доступ на чтение (не чтение и выполнение, не просмотр содержимого папки, просто чтение) к папке, и все в порядке.

...