场景:我在连接到服务器的客户端上运行代码,并使用Web服务检索有关SharePoint列表的数据。我正在使用Visual Studio 2010“服务引用”来获取我的SP站点的Web服务并从列表中获取我的数据。有用。现在我该如何编写代码,以便当我想从Test转到Production时,我的Web服务调用仍然有效?请注意,Web服务是SharePoint Web服务,我没有写它。我只是用它。我建议可能吗?我确实能够确保两个环境中的站点完全相同(URLS除外)(例如备份SP站点并将其投入生产)。感谢您的任何建议。
要点:
基本上我正在寻找从测试到生产的最佳方式,而无需重新编译消耗SP Web服务的代码。此外,作为旁注,如果有人知道测试/生产sharepoint站点必须有多相似,[为了使Web服务能够在没有任何东西的情况下工作,除了URL被更改] ..这将是有用的信息。
解决方案
项目配置文件可用于指定Web服务位置。 VS项目中的.svcdatamap和其他文件仅供设计时使用,实际用于连接SharePoint Web服务的URL作为参数传递给System.Data.Services.Client.DataServiceContext
对象。这只是切线相关,但要创建自己的WCF Web服务,请参阅此link。顺便说一句,只要SharePoint列表具有相同的列表名称,并且您要查询的列具有相同的名称,Web服务就可以在不重新编译的情况下工作。
答案 0 :(得分:15)
据我所知,Visual Studio Tools for Office项目允许您在项目中拥有app.config文件。我希望Visual Studio创建app.config文件并添加与Web服务引用相关的必要配置设置。在任何情况下,您都需要在某个地方存储正确的Web服务URL - app.config,注册表甚至是数据库。
如果您无法在app.config文件中存储Web服务端点地址信息,则可以手动配置代理。
如果它是在Visual Studio中添加为遗留“Web引用”的.asmx引用,那么您需要做的就是在调用任何Web服务方法之前设置代理对象的Url属性值。例如:
MyASMXWebService proxy = new MyASMXWebService();
proxy.Url = "web service url";
proxy.HelloWorld();
如果它是.svc WCF服务引用,那么事情会变得复杂一些。您需要以编程方式创建Web服务端点。例如:
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpoint = new EndpointAddress("web service url");
ChannelFactory<IMyWCFWebService> factory = new ChannelFactory<IMyWCFWebService>(binding, endpoint);
IMyWCFWebService proxy = factory.CreateChannel();
proxy.DoWork();
答案 1 :(得分:1)
由于SharePoint服务(SVC)不提供代理,因此选项2将不起作用。必须在您的应用程序中包含对这两个位置的引用,然后使用parm来区分生产和测试。我相信2013年可能会纠正这个错误。
答案 2 :(得分:0)
您必须在项目的web.config中编辑URL
答案 3 :(得分:0)
简单的SharePoint示例:
MyService.ListsSoapClient client = new MyService.ListsSoapClient();
client.Endpoint.Address = "site url"+"/_vti_bin/lists.asmx";