Search code examples
c#authenticationsharepointasmx

How to create ClientContext in .asmx web service


I success connect on line

list.Credentials = new System.Net.NetworkCredential("domain\\username", "password");

but can not join ClientContext to web service: I get error 401. How add new item to SPList on remote SPSite with this code? What I need fix? Thank you.

public void UpdateSPList(string Title)
{
    using (AuthenticationSvc.Authentication authSvc = new AuthenticationSvc.Authentication())
    {
        try
        {
            using (ListsSvc.Lists list = new ListsSvc.Lists())
            {
                list.Url = @"http://example-site.com/_vti_bin/Lists.asmx";
                list.CookieContainer = new System.Net.CookieContainer();
                list.AllowAutoRedirect = true;
                list.PreAuthenticate = true;

                list.Credentials = new System.Net.NetworkCredential("domain\\username", "password"); 

                string siteUrl = "http://example-site.com";
                ClientContext context = new ClientContext(siteUrl);

                List announcementsList = context.Web.Lists.GetByTitle("ListName");
                ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
                ListItem newItem = announcementsList.AddItem(itemCreateInfo);
                newItem["Title"] = "New Item";
                newItem.Update();
                context.ExecuteQuery();
            }
        }
        catch (Exception ex)
        {
            string errorEntry = ex.Message;
        }

    }
}

Solution

  • You can use the UpdateListItems method to insert new items into a SharePoint list. You have to set cmd attribute to 'New'.

    public static XmlNode UpdateListItemInsert()
    {
                listservice.Lists listProxy = new listservice.Lists();
    
                string xml = "<Batch OnError='Continue'><Method ID='1' Cmd='New'><Field Name='ID'/><Field Name='usercol'>-1;#BASESMCDEV2\\testmoss</Field></Method><Method ID='2' Cmd='New'><Field Name='ID'/><Field Name='usercol'>-1;#BASESMCDEV2\\testmoss</Field></Method></Batch>";
    
    
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
    
                XmlNode batchNode = doc.SelectSingleNode("//Batch");
    
    
                listProxy.Url = "http://basesmcdev2/sites/tester1/_vti_bin/lists.asmx";
                listProxy.UseDefaultCredentials = true;
    
                XmlNode resultNode = listProxy.UpdateListItems("custom1", batchNode);
    
                XElement e = XElement.Parse(resultNode.OuterXml);
                var id = from t in e.Descendants().Attributes("ows_ID") select t.Value;
    
    
                return resultNode;
    
    }
    

    More Reference: