【问题标题】:SharePoint 2013: Why getting 500 error while creating clientContext?SharePoint 2013:为什么在创建 clientContext 时出现 500 错误?
【发布时间】:2019-10-16 22:52:50
【问题描述】:

我想创建一个 IIS 网络服务,它必须将列表项写入 SharePoint on Premise。

我想使用 CSOM 并尝试创建一个 ClientContext。

public string AddListItem()
string result = string.Empty;
string siteUrl = "https://serverUrl";

using (ClientContext context = new ClientContext(siteUrl))
        {
            context.Credentials = new NetworkCredential("User", "Password", "Domain");
            List list = context.Web.Lists.GetByTitle("Test");
            context.Load(list);
            context.ExecuteQuery();
        }

        return result;
    }

执行时,context.ExecuteQuery(); 出现错误

System.Net.WebException: '远程服务器返回错误:(500) 内部服务器错误。'

在事件日志中,我看到以下错误:

WebHost 未能处理请求。 发件人信息:System.ServiceModel.ServiceHostingEnvironment+HostingManager/41028758 异常:System.ServiceModel.ServiceActivationException:由于编译期间出现异常,无法激活服务“/_vti_bin/client.svc”。异常消息是:由于对象的当前状态,操作无效。 ---> System.InvalidOperationException:由于对象的当前状态,操作无效。 在 Microsoft.SharePoint.Administration.SPWebApplication.get_Context() ....................

在调试中,我还看到在创建 ClientContext 之后和之前 context.ExecuteQuery(); ClientContext 的某些属性出现以下错误,例如:

ServerLibraryVersion = 'context.ServerLibraryVersion' 引发了“Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException”类型的异常

【问题讨论】:

  • 可能是 SharePoint Online 的一些安全问题。尝试在创建clientcontext 后添加下一行ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 并将NetworkCredential 替换为SharePointOnlineCredentials

标签: c# wcf sharepoint


【解决方案1】:

您的代码似乎适用于本地 SharePoint。我认为您应该检查农场上的一些设置,这就是我的原因。 如果 IIS 管理服务已开启,请检查场服务器上的服务

也在 SharePoint CA 上检查用户配置文件服务和对 Windows 令牌服务的声明(两者都应该打开)

...抱歉 lang :)...通常我可以访问 PL 语言的 SharePoint,但我尝试将最重要的内容翻译成 ang。

还请检查您尝试访问的应用程序池在 IIS 上是否正常工作。我想是的,否则你会有很多其他错误,但最好检查一下。

【讨论】:

  • 我的 devolper 机器和共享点环境确实有问题。
【解决方案2】:

用CSOM,用什么WCF不清楚:

ClientContextctx = newClientContext("http://gowtham.sharepoint.com");  
            List oList = ctx.Web.Lists.GetByTitle("Announcements");  
            ListItemCreationInformationitemCreateInfo = newListItemCreationInformation();  
            ListItemnewItem = oList.AddItem(itemCreateInfo);  
            newItem["Title"] = "Test Item!";  
            newItem["Body"] = "welcome to Gowtham Blog";  
            newItem.Update();
            context.ExecuteQuery();  

【讨论】:

    【解决方案3】:

    试试下面的代码

    using (ClientContext clientContext = new ClientContext(ServerURL))
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        var securePassword = new SecureString();
        foreach (char c in password)
        {
            securePassword.AppendChar(c);
        }
        clientContext.Credentials = new SharePointOnlineCredentials(your_mail_ID, securePassword);
        Web web = clientContext.Web;
        var list = web.Lists.GetByTitle("your_list_name");
        clientContext.Load(list.RootFolder);
        clientContext.ExecuteQuery();
    }
    

    【讨论】:

      【解决方案4】:

      检查“SharePoint Web Servies Root”应用程序池是否已停止或“SharePoint Web 服务”Web 应用程序未在 IIS 中启动。

      转到 IIS 应用程序池,找到“SecurityTokenServiceApplicationPool”并从操作面板中单击“高级设置”,然后滚动到“ProcessModel”部分并将身份更改为您的 SharePoint 场帐户并执行 IISRESET。

      并使用 CSOM C# 代码创建一个控制台应用程序以检查它是否有效。

      【讨论】:

        【解决方案5】:

        FWIW - 我遇到了完全相同的错误 - CSOM 本地模式到本地 SP2016,请求按标题列出列表时出现 500 错误。

        我刚刚应用了 10/2019 SharePoint 更新,但没有通过产品配置向导和管理中心的提示。一旦我这样做了,CSOM 请求就会再次起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-16
          • 1970-01-01
          • 2020-02-09
          • 2015-12-02
          相关资源
          最近更新 更多