2

根据 MSDN,部署自定义 Web 服务需要创建 *wsdl.aspx 和 *disco.aspx 文件,并将它们与 .asmx 一起放在 _vti_bin 文件夹下(C:\Program Files\Common Files\Microsoft Shared\Web Server扩展\14\isapi)。并将dll放在sharepoint虚拟目录根目录的bin文件夹下。它对我来说可以正常工作。

但是,我还发现如果我将 .asmx 文件放在根虚拟目录下而不创建那些 *wsdl.aspx 和 *disco.aspx 文件。与上述方式相比,它也可以工作并且更容易。所以我想知道这种方式的潜在问题是什么?

4

3 回答 3

2

如果没有 WSDL 和 DISCO 文件,人们的 Web 服务客户端/消费者可能很难“发现”您的服务合同。如果这不是您关心的问题,请不要担心。

于 2010-01-14T19:32:49.127 回答
1

我在 SharePoint 2007 中创建了几个简单地部署为http://.../_layouts/mySubFolder/service.asmx. 有用!对于 SharePoint,Web 服务的表示层是 HTML 还是 XML 无关紧要(在这两种情况下都必须应用安全性,可以作为http://server/_layouts/mySubFolder/service.asmxhttp://server/sites/subsite/_layouts/mySubFolder/service.asmx

关于它的错误的事情

  • “布局”一词意味着“与外观有关”..当我们谈论 Web 服务时,情况并非如此
  • 当迁移到 WCF 服务发挥作用的 SPS2010 时,情况会有所不同。但是,我还没有玩过SPS2010,还不知道有什么不同。(这里有一些关于它 - http://blog.mastykarz.nl/wcf-sharepoint-context/
于 2010-01-14T07:07:24.717 回答
0

相当老的帖子,但我只是想补充一下,因为我不相信迄今为止的回复提供了有关为什么以这种方式设置 SharePoint 的相关细节。

将 Web 服务部署到 ISAPI\vti_bin for SharePoint 的原因是,对此文件夹的请求进行了特定修改,以允许 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 服务文件部署到哪里?

于 2012-01-17T06:11:26.860 回答