2010-06-02 3 views
2

Je suis un peu perplexe sur la façon d'attraper un type d'erreur spécifique de Microsoft.SharePoint.SoapServer.SoapServerException, je vais vous expliquer pourquoi, et j'ai inclus un exemple de code ci-dessous pour vous les gars à voir.Comment intercepter une exception Microsoft.SharePoint.SoapServer.SoapServerException?

Comme vous le savez, il existe deux façons d'interagir avec MOSS.

  1. Le modèle d'objet (ne fonctionne que sur MOSS Server)
  2. Web Services (peut être exécuté sur une machine distante interrogeant le serveur MOSS)

Alors que par exemple de code J'utilise web services pour interroger MOSS, à cause de cela, je n'ai pas sharepoint installé sur le serveur distant exécutant ces services Web et sans MOSS installé il est impossible de référencer la DLL SharePoint pour obtenir le type d'erreur spécifique: Microsoft.SharePoint.SoapServer.SoapServerException.

Si je ne peux pas référencer la DLL, alors comment diable suis-je censé attraper ce type d'erreur spécifique?

System.Xml.XmlNode ndListView = wsLists.GetListAndView(ListName, ""); 
      string strListID = ndListView.ChildNodes[0].Attributes["Name"].Value; 
      string strViewID = ndListView.ChildNodes[1].Attributes["Name"].Value; 

      System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
      System.Xml.XmlElement batchElement = doc.CreateElement("Batch"); 
      batchElement.SetAttribute("OnError", "Continue"); 
      batchElement.SetAttribute("ListVersion", "1"); 
      batchElement.SetAttribute("ViewName", strViewID); 

      batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" + 
      "<Field Name='DeliveryStatus'>" + newStatus.ToString() + "</Field>" + 
      "<Where><Eq><FieldRef Name='ID' /><Value Type='Text'>" + id + "</Value></Eq></Where></Method>"; 

      try 
      { 
       wsLists.UpdateListItems(strListID, batchElement); 
       return true; 
      } 
      catch (Microsoft.SharePoint.SoapServer.SoapServerException ex) 
      { 

      } 

Répondre

4

Sa fait un System.Web.Services.Protocols.SoapException

+0

Pas dans ce cas ... En fait VS mentionne spécifiquement l'exception comme Microsoft.SharePoint. SoapServer.SoapServerException. Je crois que cette DLL est dans le répertoire des fichiers communs sur les serveurs SP –

+0

Il peut être pris en tant que System.Web.Services.Protocols.SoapException. Vous ne pouvez pas référencer légalement cette DLL si vous appelez un service Web SharePoint à partir d'une machine distante. Cela n'a donc aucun sens d'essayer de le référencer, de la même manière que vous ne pouvez pas utiliser le modèle objet depuis une machine distante, d'où la raison des services web, d'où la raison de ma confusion en premier lieu. –

+2

Avec .NET 3.5 et une référence de service je ne pouvais pas attraper une exception SoapServerException comme une exception SoapException. Une exception FaultException semblait être l'option la plus proche. –

0

Référence: How to get FaultException details?

catch (FaultException fe) 
    { 
     MessageFault msgFault = fe.CreateMessageFault(); 
     XmlElement elm = msgFault.GetDetail<XmlElement>(); 
     var exceptionDetails = elm.InnerText; 
    } 
Questions connexes