C# 是否有动态web服务引用?

C# 是否有动态web服务引用?,c#,web-services,sharepoint,list,C#,Web Services,Sharepoint,List,我的目标是连接到sharepoint列表并将数据下载到datatable中。我可以很好地做到这一点,但这是一种非常“硬编码”的方式,因为我必须在VisualStudio中手动在项目中添加web引用。例如,如果我想指出如下内容: 或 (只是一个显示格式的虚拟URL) 我必须在VisualStudio中创建一个web服务引用。这将生成一组代码(Reference.cs),并在我的项目和app.config中创建一个web引用部分,现在我可以使用以下代码: com.mysite.Lists l

我的目标是连接到sharepoint列表并将数据下载到datatable中。我可以很好地做到这一点,但这是一种非常“硬编码”的方式,因为我必须在VisualStudio中手动在项目中添加web引用。例如,如果我想指出如下内容:



(只是一个显示格式的虚拟URL)

我必须在VisualStudio中创建一个web服务引用。这将生成一组代码(Reference.cs),并在我的项目和app.config中创建一个web引用部分,现在我可以使用以下代码:

  com.mysite.Lists lists = new Lists();
  lists.Credentials = new System.Net.NetworkCredential(user, pwd, "CORP");
  lists.Url = "http://www.abc.com/sites/MyTeam/_vti_bin/Lists.asmx";

  XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
  XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
  XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

  XmlNode listitems = lists.GetListItems(sharepointList, null, ndQuery, ndViewFields, "1000",
                                               ndQueryOptions, null);
不管怎样,我可以从外部获取一个URL,让代码工作,而不必创建所有这些手动更新和配置更新


我想把这段代码放到一个库中,这样人们就可以获取一个URL并将其传递进来。有趣的是,如果你看上面的是一个URL属性(所以你认为它会工作),但它似乎不工作,除非所有其他配置和引用都设置好了。是否可以在不需要所有这些visual studio自动生成的配置驱动代码的情况下执行此操作?

您可以看看这篇来自Microsoft的Michele Leroux Bustamante的有趣文章:

路由器必须是动态的,并适应所有契约,因此这将是一个良好的起点

米格尔·卡斯特罗的这篇文章:


艰难的道路啊,祝你好运:)

如果你的问题是你需要为每个列表提供一个新的服务参考,那么它已经解决了。只要所有List.asmx服务都具有相同的WSDL,就不需要为每个服务提供新的服务引用。您可以使用单个服务引用,只需使用接受端点地址(Url)的构造函数重载即可。

创建动态客户端的最低级方法是new ChannelFactory()。CreateChannel(binding,address),从XML构造消息对象,在通道上调用Request()方法,然后处理返回的XML消息。如果您可以进一步指定所调用的Web服务中哪些不是动态的,那么它可以变得简单得多。实际上,Sharepoint网站的Lists.asmx中是否存在任何动态内容?我的意思是,不同安装的方法或数据类型是否不同?

我也经历过类似的情况,调用SharePoint webservice并根据所选站点获取不同列表的数据

我的方法是将站点url和凭据存储在xml文件中。 一旦有了它,您就可以动态地传递站点url,如下所示

您可以创建一个函数并传递所需的参数,如SiteURL、DocLibName、ListID等

function GetListData(String SiteURL, string DocLibName, string ListId)
com.mysite.Lists lists = new Lists()
{

lists.Credentials = new System.Net.NetworkCredential(user, pwd, "CORP");

lists.Url = SiteURL +/_vti_bin/Lists.asmx";
XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

XmlNode listitems = lists.GetListItems(DocLibName, null, ndQuery, ndViewFields, "1000",
                                               ndQueryOptions, null);

}
一旦在XMLNode中有了它,就可以在dataset中获取它

DataSet dsXML=new DataSet(); 
dsXML.LoadXml(node.OuterXml);
希望这会有帮助


如果您有任何疑问,请告诉我。

您使用的是moss还是sharepoint2010@John桑德斯:仅供参考。。。
列表
对象没有任何其他构造函数来设置URL。但是,设置URL属性将正常工作。@Kit:那么,我猜您使用的是Web引用。服务引用有一个接受端点引用的构造函数。@Kit:如果您认为我们通常生成WSDL代理文件而不是使用Web引用,您应该立即停止使用Web引用。为什么我们不应该使用web引用?@Kit:因为它们是旧的“ASMX”技术的一部分,微软现在认为它是“遗留软件”。除非您别无选择,否则请使用WCF。