Довольно старый пост, но я подумал, что я бы добавил к этому, поскольку я не думаю, что ответы на сегодняшний день дают соответствующую информацию о том, почему SharePoint настроен таким образом.
Причина, по которой вы развертываете веб-сервисы в ISAPI \ vti_bin для SharePoint, заключается в том, что в запросы к этой папке были внесены конкретные изменения, позволяющие SharePoint создать точное обнаружение и файл WSDL для службы на основе текущего виртуального пути службы , а не путь на сайте IIS.
В частности, wsdisco.aspx и wswsdl.aspx обрабатывают запросы к этому виртуальному каталогу и будут вызывать соответствующие disco.aspx и wsdl.aspx для правильной генерации xml или wsdl xml обнаружения на основе текущего URL-адреса SharePoint.
Если вы добавите сервисную ссылку в свой проект для http://sharepointsite.com/sitecol/subsite/_vti_bin/lists.asmx, то контекст для запросов, сделанных по этому URL, будет относиться к / sitecol / subsite, как и следовало ожидать.
Однако, если вы добавите ссылку на службу к http://sharepointsite.com/sitecol/subsite/_layouts/MyCustSvc.asmx, контекст будет зафиксирован на http://sharepointsite.com/, поскольку генератор wsdl по умолчанию для ASP.NET не знает о виртуальных путях SharePoint. В этом случае вызовы SPContext в службе не будут работать должным образом.
Здесь есть отличный пост с примерами, объясняющими это:
Где вы развертываете файлы пользовательских веб-служб SharePoint?