根据MSDN,为了部署自定义Web服务,我们需要创建* wsdl.aspx和* disco.aspx文件,并将它们与.asmx放在_vti_bin文件夹下(C:\ Program Files \ Common Files \ Microsoft Shared) \ Web Server Extensions \ 14 \ isapi)。并将dll放在sharepoint虚拟目录根目录的bin文件夹下。它适用于我。
但是,我还发现,如果我将.asmx文件放在根虚拟目录下,而不创建那些* wsdl.aspx和* disco.aspx文件。它可以比上面的方式更好地工作。所以我想知道这种方式的潜在问题是什么?
答案 0 :(得分:2)
如果没有WSDL和DISCO文件,人们的Web服务客户/消费者可能很难“发现”您的服务合同。如果您不关心这一点,请不要担心。
答案 1 :(得分:1)
我在SharePoint 2007中创建了几个简单部署为http://.../_layouts/mySubFolder/service.asmx
的Web服务。有用!对于SharePoint,表示层是Web服务的HTML还是XML无关紧要(在两种情况下都必须应用安全性,可以http://server/_layouts/mySubFolder/service.asmx
和http://server/sites/subsite/_layouts/mySubFolder/service.asmx
错误的事情
答案 2 :(得分: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项目添加服务引用,则该网址上发出的请求的上下文将与您期望的/ sitecol / subsite相关。
但是,如果您向http://sharepointsite.com/sitecol/subsite/ _layouts / MyCustSvc.asmx 添加服务引用,则上下文将固定为http://sharepointsite.com/,因为ASP.NET的默认wsdl生成器不是了解SharePoint虚拟路径。在这种情况下,对服务中的SPContext的调用将无法按预期工作。
这里有一篇很好的帖子,其中有一些例子说明了这一点: Where do you deploy custom SharePoint web service files to?