【问题标题】:How to add a new item in a sharepoint list using web services in C sharp如何使用 C sharp 中的 Web 服务在共享点列表中添加新项目
【发布时间】:2010-05-15 03:10:28
【问题描述】:

我正在尝试使用 Web 服务从 c# 中的 winform 应用程序将新项目添加到共享点列表。唯一的结果是,我得到了无用的异常“'Microsoft.SharePoint.SoapServer.SoapServerException' 类型的异常被抛出。”

我有一个名为 WebSrvRef 的网络参考,指向http://server/site/subsite/_vti_bin/Lists.asmx

还有这段代码:

        XmlDocument xmlDoc;
        XmlElement elBatch;
        XmlNode ndReturn;
        string[] sValues;
        string sListGUID;
        string sViewGUID;

        if (lstResults.Items.Count < 1)
        {
            MessageBox.Show("Unable to Add To SharePoint\n" +
                "No test file processed. The list is blank.", 
                "Add To SharePoint", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return;
        }

        WebSrvRef.Lists listService = new WebSrvRef.Lists();
        sViewGUID = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"; // Test List View GUID
        sListGUID = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"; // Test List GUID

        listService.Credentials= System.Net.CredentialCache.DefaultCredentials;

        frmAddToSharePoint dlgAddSharePoint = new frmAddToSharePoint();
        if (dlgAddSharePoint.ShowDialog() == DialogResult.Cancel)
        {
            dlgAddSharePoint.Dispose();
            listService.Dispose();
            return;
        }

        sValues = dlgAddSharePoint.Tag.ToString().Split('~');
        dlgAddSharePoint.Dispose();

        string strBatch = "<Method ID='1' Cmd='New'>" +
            "<Field Name='Client#'>" + sValues[0] + "</Field>" +
            "<Field Name='Company'>" + sValues[1] + "</Field>" +
            "<Field Name='Contact Name'>" + sValues[2] + "</Field>" +
            "<Field Name='Phone Number'>" + sValues[3] + "</Field>" +
            "<Field Name='Brand'>" + sValues[4] + "</Field>" +
            "<Field Name='Model'>" + sValues[5] + "</Field>" +
            "<Field Name='DPI'>" + sValues[6] + "</Field>" +
            "<Field Name='Color'>" + sValues[7] + "</Field>" +
            "<Field Name='Compression'>" + sValues[8] + "</Field>" +
            "<Field Name='Value % 1'>" + (((float)lstResults.Groups["Value 1"].Tag)*100).ToString("##0.00") + "</Field>" +
            "<Field Name='Value % 2'>" + (((float)lstResults.Groups["Value 2"].Tag)*100).ToString("##0.00") + "</Field>" +
            "<Field Name='Value % 3'>" + (((float)lstResults.Groups["Value 3"].Tag)*100).ToString("##0.00") + "</Field>" +
            "<Field Name='Value % 4'>" + (((float)lstResults.Groups["Value 4"].Tag)*100).ToString("##0.00") + "</Field>" +
            "<Field Name='Value % 5'>" + (((float)lstResults.Groups["Value 5"].Tag)*100).ToString("##0.00") + "</Field>" +
            "<Field Name='Comments'></Field>" +
            "<Field Name='Overall'>" + (fTotalScore*100).ToString("##0.00") + "</Field>" +
            "<Field Name='Average'>" + (fTotalAvg * 100).ToString("##0.00") + "</Field>" +
            "<Field Name='Transfered'>" + sValues[9] + "</Field>" +
            "<Field Name='Notes'>" + sValues[10] + "</Field>" +
            "<Field Name='Resolved'>" + sValues[11] + "</Field>" +
            "</Method>";

        try
        {
            xmlDoc = new System.Xml.XmlDocument();
            elBatch = xmlDoc.CreateElement("Batch");

            elBatch.SetAttribute("OnError", "Continue");
            elBatch.SetAttribute("ListVersion", "1");
            elBatch.SetAttribute("ViewName", sViewGUID);

            strBatch = strBatch.Replace("&", "&amp;");
            elBatch.InnerXml = strBatch;

            ndReturn = listService.UpdateListItems(sListGUID, elBatch);

            MessageBox.Show(ndReturn.OuterXml);
            listService.Dispose();                
        }
        catch(Exception Ex)
        {
            MessageBox.Show(Ex.Message +
                "\n\nSource\n" + Ex.Source +
                "\n\nTargetSite\n" + Ex.TargetSite +
                "\n\nStackTrace\n" + Ex.StackTrace, 
                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            listService.Dispose();
        }

我做错了什么?我错过了什么? 请帮忙!!

弗兰克

【问题讨论】:

    标签: c#


    【解决方案1】:

    这很可能是由于这一行:

    listService.Credentials= System.Net.CredentialCache.DefaultCredentials;
    

    将其更改为设置的用户 ID/密码,如下所示:

    listService.Credentials = new NetworkCredential("UserID", "Password");
    

    确保用户 ID/密码有权创建列表等。

    【讨论】:

    • 我将这一行改为:listService.Credentials = new NetworkCredential("UserID", "Password", "Domain");还是行不通。如果我转到 sharepoint 站点中的列表,我可以创建新项目。我还没有尝试用调试器缓存错误。
    【解决方案2】:

    如果 NeworkCredential 不是答案,您还应该确保使用正确的字段名称。

    “字段名称”应该是 SharePoint 列表字段的“FieldInternalName”。要获取字段的 FieldInternalName,请在 SharePoint 中从列表中选择“新建”,然后选择该页面的“查看源代码”(右键单击“新建”表单页面中的任何位置)。您将在源文件末尾附近看到字段及其内部名称。

    【讨论】:

      【解决方案3】:

      好的,现在可以了。这是我错了:

      我没有使用 FieldInternalName -> 感谢 Robert Williams

      我也错过了这一行,因为即使我的 Web Reference 指向正确的位置,我的 listService.List 仍然指向服务器根站点。

      listService.Url = @"http://server/site/subsite/_vti_bin/Lists.asmx";
      

      【讨论】:

        【解决方案4】:

        soap 异常将有一个详细信息节点,其中包含更有用的错误描述。在调试器中捕获并深入研究。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-18
          相关资源
          最近更新 更多