【发布时间】:2015-12-18 15:03:03
【问题描述】:
我正在调用 Sharepoint 2007 Lists 网络服务,如下所示:
class ListUpdater
{
public void update(ListWS.Lists listService,XmlNode xNode)
{
listService.UpdateListItems("myListName", xNode);
}
}
因为我们要迁移到 Sharepoint 2013,所以我需要将此方法更改为:
class ListUpdater
{
public void update(ListWS_2013QA.Lists listService,XmlNode xNode)
{
listService.UpdateListItems("myListName", xNode);
}
}
其中ListWS_2013QA 是新 URL 处的网络服务。
但是,我不想在声明 Web 服务实例的任何地方都更改它,特别是如果我可能需要在应用程序的生命周期内多次更改 Web 服务。我正在考虑有一个接口IListService,以便我可以将方法重写为:
class ListUpdater
{
public void update(IListService listService,XmlNode xNode)
{
listService.UpdateListItems("myListName", xNode);
}
}
但是对于每个版本的 Web 服务,我必须使用一个包装器来实现接口,该包装器实现了我在代码中使用的 Lists 的每个方法,如下所示:
class ListsWrapper_2013QA:IListService
{
ListWS_2013QA.Lists listService;
public XmlNode DoSomething(string listName, XmlNode listProperties, XmlNode newFields, XmlNode updateFields, XmlNode deleteFields, string listVersion)
{
return listService.UpdateList(listName, listProperties, newFields, updateFields, deleteFields, listVersion);
}
public XmlNode UpdateListItems(string listName, XmlNode updates)
{
return listService.UpdateListItems(listName, updates);
}
}
有什么办法可以利用ListWS.Lists 和ListWS_2013QA 已经有相同方法的事实,所以我不必每次想使用Lists 时都编写一个扩展的包装类来自不同 URL 的服务?
【问题讨论】:
-
那么您的代码中标题中的错误消息究竟是从哪里得到的?
-
@steve,标题来自我在发布之前解决的另一个问题,我发布此问题时忘记更改它。我现在就改。
-
@juharr,请参阅我对史蒂夫评论的回复。
标签: c# web-services sharepoint interface