かなり古い投稿ですが、これまでの回答では、SharePoint がこのように設定されている理由に関する詳細が提供されているとは思えないため、これに追加すると思いました。
SharePoint の ISAPI\vti_bin に Web サービスを展開する理由は、SharePoint がサービスの現在の仮想パスに基づいてサービスの正確な検出と WSDL ファイルを構築できるようにするために、このフォルダーへの要求に対して特定の変更が加えられているためです。 IIS サイトのパス。
具体的には、wsdisco.aspx と wswsdl.aspx がこの仮想ディレクトリへの要求を処理し、関連する disco.aspx と wsdl.aspx を呼び出して、現在の SharePoint URL に基づいて検出 xml または wsdl xml を正しく生成します。
http://sharepointsite.com/sitecol/subsite/_vti_bin/lists.asmxのプロジェクトにサービス参照を追加すると、その URL で行われたリクエストのコンテキストは、予想どおり /sitecol/subsite に関連します。
ただし、サービス参照をhttp://sharepointsite.com/sitecol/subsite/ _layouts/MyCustSvc.asmxに追加すると、コンテキストはhttp://sharepointsite.com/に固定されます。これは、ASP.NET のデフォルトの wsdl ジェネレーターがSharePoint 仮想パスを認識します。その場合、サービス内の SPContext への呼び出しは期待どおりに機能しません。
これを説明する例を含む優れた投稿がここにあります:
カスタム SharePoint Web サービス ファイルをどこにデプロイしますか?