2012-05-13 3 views
0

У меня есть веб-служба, которую я написал для добавления значений в список sharepoint. Я могу позвонить в webservice на localmachine. но когда я развертываю его на сервере, я получаю статус 401: Несанкционированный.Сервер не смог обработать запрос. ---> Не удалось выполнить запрос с HTTP-статусом 401: Неавторизованный

Может ли кто-нибудь сказать мне, почему я получаю ошибку прокси-сервера 401, я попытался добавить прокси-теги в веб-конфигурацию, это не сработало.

Код

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class Req : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public Guid Add() 
    { 

     string uniqueGuid = string.Empty; 
     string[] uniqueID; 
    try 
    {   
       CrmList.Lists list = new CrmList.Lists(); 
       list.PreAuthenticate = true; 


       #region getvalue 
       list.Credentials = System.Net.CredentialCache.DefaultCredentials; 
       XmlNode ndLists = list.GetListCollection(); 


       //XmlNode test = list.GetList(listName); 

       list.Url = "http://site/_vti_bin/Lists.asmx"; 


       System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); 

       string listName = Properties.Settings.Default.ListGuid; 
       string viewName = Properties.Settings.Default.ViewGuid; 
       string rowLimit = Properties.Settings.Default.RowLimit; 

       System.Xml.XmlElement query = xmlDoc.CreateElement("Query"); 
       System.Xml.XmlElement viewFields = 
        xmlDoc.CreateElement("ViewFields"); 
       System.Xml.XmlElement queryOptions = 
        xmlDoc.CreateElement("QueryOptions"); 


       query.InnerXml = "<OrderBy><FieldRef Name='ID' Ascending='False' /></OrderBy>"; 

       viewFields.InnerXml = @"<FieldRef Name='ID' />"; 


       queryOptions.InnerXml = ""; 


       System.Xml.XmlNode nodeListItems = list.GetListItems(listName, viewName, query, viewFields, rowLimit, queryOptions, "09bdac52-8897-41ee-8a0e-df5fdba617e9"); 





       #endregion 

       string listdata=string.Empty; 
       string InvoiceType =string.Empty; 

        listdata= @"<Method ID=""1"" Cmd=""New"">"; 

        listdata += @"<Field Name=""ID""></Field>"; 

        listdata += @"</Method>"; 

        System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument() ; 

        System.Xml.XmlElement xbatch = xdoc.CreateElement("Batch"); 
        xbatch.SetAttribute("OnError", "Return"); 
        xbatch.InnerXml = listdata; 

        try 
        { 
         list.UpdateListItems(listName, xbatch); 

        } 
        catch (Exception ex) 
        { 

        } 



     #region getguid 
        System.Xml.XmlNode currentListValues = list.GetListItems(listName, viewName, query, viewFields, rowLimit, queryOptions,Properties.Settings.Default.WebGuid); 
        string test = string.Empty; 
        XmlDocument xdoc1 = new XmlDocument(); 
        XmlNamespaceManager nsmanager = new XmlNamespaceManager(xdoc1.NameTable); 
        nsmanager.AddNamespace("ns1", "http://schemas.microsoft.com/sharepoint/soap"); 
        xdoc1.LoadXml(currentListValues.InnerXml); 
        System.Xml.XmlElement root = xdoc1.DocumentElement; 
        List<string> str1 = new List<string>(); 
        XmlAttributeCollection attCol; 

        bool IsGuid; 
        foreach (System.Xml.XmlNode listItem in root) 
        { 
         string name = listItem.Name; 
         string value = listItem.OuterXml; 
         attCol = listItem.Attributes; 

         for (int i = 0; i < attCol.Count; i++) 
         { 
          IsGuid = attCol[i].Value.ToString().Contains("{"); 
          if (IsGuid) 
          { 
           uniqueID = attCol[i].Value.ToString().Split('{'); 
           uniqueGuid = uniqueID[1].ToString().Replace("}", ""); 
           //str1.Add(uniqueGuid); 
           break; 
          } 


         } 
         if (!string.IsNullOrEmpty(uniqueGuid)) 
         { 
          break; 
         } 

        } 
     #endregion 


    } 

      catch (Exception exc) 
      { 

       throw ; 
      } 
    Guid currentItemGuid = new Guid(uniqueGuid); 
    return currentItemGuid; 
    } 
} 

ответ

0

Вы должны использовать действительные учетные данные. DefaultCredentials работал на вашем компьютере, потому что sharepoint знает пользователя. Если sharepoint находится на другом компьютере, вам необходимо создать NetwordCredentials с пользователем & пароль, действующий на сервере SharePoint.

Смежные вопросы