我的目标是连接到共享点列表并将数据下载到数据表中。我可以很好地做到这一点,但是以一种非常“硬编码”的方式,因为我必须在 Visual Studio 内手动在项目上添加 Web 引用。例如,如果我想指出这样的内容:
http://www.ab.com/sites/SiteCollections/MyTeam/_vti_bin/dspsts.asmx
或
http://www.abc.com/sites/MyTeam/_vti_bin/Lists.asmx
(只是一个显示格式的虚拟 URL)。
我必须在 Visual Studio 中创建 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 自动生成的配置驱动代码的情况下执行此操作?
最佳答案
如果您的问题是每个列表都需要一个新的服务引用,那么它已经解决了。只要所有 List.asmx 服务都具有相同的 WSDL,您就不需要为每个服务创建新的服务引用。您可以使用单个服务引用,并且只需使用采用端点地址 (Url) 的构造函数重载。
关于c# - 有没有动态网络服务引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4483640/