C# 如何在运行时为sharepoint生成代理类

C# 如何在运行时为sharepoint生成代理类,c#,sharepoint,sharepoint-2010,C#,Sharepoint,Sharepoint 2010,我有一个下面给出的sharepoint网站,我可以将其添加为服务参考和创建列表和编辑列表的代码 我的代码的问题是它总是硬编码到上面的测试sharepoint站点。如果我想继续使用代码,我觉得我应该知道如何在运行时获取sharepoint的url并生成代理类 我的代码如下所示: ListsSoapClient client = new ListsSoapClient(); client.ClientCredentials.Windows.Cl

我有一个下面给出的sharepoint网站,我可以将其添加为服务参考和创建列表和编辑列表的代码

我的代码的问题是它总是硬编码到上面的测试sharepoint站点。如果我想继续使用代码,我觉得我应该知道如何在运行时获取sharepoint的url并生成代理类

我的代码如下所示:

        ListsSoapClient client = new ListsSoapClient();            
        client.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
        client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
        client.Open();

你可以试试下面的方法

client.Endpoint.Address = new System.ServiceModel.EndpointAddress(newUrl);

如果能够使代码使用REST端点,则可以在运行时更改URL,然后反序列化返回值:

Uri uri = new Uri("mysharpeointurl/_api/web/Lists/GetByTitle('libraryname')/Items?$select=ID,Title");
        var response = client.GetAsync(uri);
        string text = await response.Result.Content.ReadAsStringAsync();

        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Returned.RootObject));
        Returned.RootObject rootObject = null;
        using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(text))) {
            var documentdata = (Returned.RootObject)serializer.ReadObject(ms);
            rootObject = documentdata;
        }

        return rootObject;

这样,您只需在运行时更改URI,但是如果两个站点都返回相同的对象,并且在datacontract Returned.RootObject上具有可用的属性,那么您就可以返回数据。通过对其余部分执行$select语句,您只能返回您想要的,并且可以避免通过网络发送额外数据。

我不明白为什么不能重用代码。如果您需要指向另一个SP,只需更改应用程序属性中的URL,因为list.asmx具有相同的约定。Re:downvote:设置端点地址无效?让我知道它是如何失败的,我可以更深入地研究它。