将自定义 Web 服务部署到共享点服务器(2007/2010)?

Posted

技术标签:

【中文标题】将自定义 Web 服务部署到共享点服务器(2007/2010)?【英文标题】:Deploy custom web service to sharepoint server(2007/2010)? 【发布时间】:2011-01-04 23:26:21 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

我在 SharePoint 2007 中创建了几个 Web 服务,它们被简单地部署为 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/)

【讨论】:

谢谢,您链接中的“再次与上下文有关”部分回答了我的问题。【参考方案2】:

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

【讨论】:

您仍然可以从 ASMX 获取 WSDL 只有在同一个主机尝试访问才能获取。从客户端您将无法通过 ASMX 获取 WSDL。【参考方案3】:

相当老的帖子,但我只是想补充一下,因为我不相信迄今为止的回复提供了有关为什么以这种方式设置 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 的调用将无法按预期工作。

这里有一篇很好的帖子,其中有解释这一点的示例: Where do you deploy custom SharePoint web service files to?

【讨论】:

以上是关于将自定义 Web 服务部署到共享点服务器(2007/2010)?的主要内容,如果未能解决你的问题,请参考以下文章

将自定义程序部署到托管服务

将自定义 Web 部件部署到 SharePoint 2013

如何将自定义 WebPartPage 部署到特定目标站点 (Web)

如何将自定义 EndPointBehavior 添加到服务的 web.config?

php 将自定义数据发送到 php web 服务器并保存到文件

JSON 写入错误中的类型无效,尝试通过 JSON 将自定义类发送到 .NET Web 服务