2017-06-06 22 views
0

リモート共有ポイントリストからアイテムを取得するコードを記述しました。スタンドアロンのWindowsフォームアプリケーションでは、正常に動作します。ただし、実際の作業は、これを既存のWCF Webサービスに追加することです。参照まったく同じWebサービスのURLとまったく同じコードは、イベントビューアにこのエラーがスローされますと(Sharepoint 2010 WebサービスGetListItemsエラー400 Bad Request

XmlNode nodeListItems = 
         listService.GetListItems 
         (listName, string.Empty, query, viewFields, "0", queryOptions, null); 

は、私は全体のメソッドが含まれます:

Exception: Exception caught: 'System.Net.WebException' in System.dll ("The remote server returned an error: (400) Bad Request."). Exception caught: 'System.Net.WebException' in System.dll ("The remote server returned an error: (400) Bad Request.")

は、このコード行で発生しますいくつかの名前は以下の無実を守るために変更されました:))。それは、スタンドアローンの勝利アプリでうまく動作することを覚えておいてください。 WCFサービスでのみこれが問題です。私にとってさらに奇妙なのは、それがハングアップすることです。イベントビューアでのみ、このエラーが表示されます。私は試してキャッチしていると私はそれがキャッチに行くだろうと思っていただろう。私はちょうど見るために余分な試合を加え、サイコロを加えなかった。 URLではありません。資格情報ではありません。私はそれを確実にするために一点でハードコーディングさえしました。たぶん、WCFにいくつかの隠し設定がありますか?

何か助けていただければ幸いです。ここでは、コードです:

private string GetPhoneNumber(string AccountNumber) 
     { 
      var retvalue = ""; 

      try 
      { 
       Lists listService = new Lists(); 

       /*Authenticate the current user by passing their default 
       credentials to the Web service from the system credential 
       cache. */ 

       //listService.Credentials = new NetworkCredential(sUsername, sPassword, domain); 
       listService.Credentials = System.Net.CredentialCache.DefaultCredentials; 

       // listService.Credentials = new System.Net.NetworkCredential("un", "pw"); 
       /*Set the Url property of the service for the path to a subsite. 
       Not setting this property will return the lists in the root Web site.*/ 
       listService.Url = 
       "somesharepointsite/_vti_bin/Lists.asmx"; 

       /* Instantiate an XmlDocument object */ 
       XmlDocument xmlDoc = new XmlDocument(); 

       /* Assign values to the string parameters of the GetListItems method, 
       using GUIDs for the listName and viewName variables. For listName, 
       using the list display name will also work, but using the list GUID 
       is recommended. For viewName, only the view GUID can be used. 
       Using an empty string for viewName causes the default view to be used.*/ 
       string listName = "Telephone Numbers"; 

       /*Use the CreateElement method of the document object to create 
       elements for the parameters that use XML.*/ 
       XmlElement query = xmlDoc.CreateElement("Query"); 
       XmlElement viewFields = 
        xmlDoc.CreateElement("ViewFields"); 
       XmlElement queryOptions = 
        xmlDoc.CreateElement("QueryOptions"); 

       /*To specify values for the parameter elements (optional), assign 
       CAML fragments to the InnerXml property of each element.*/ 
       query.InnerXml = "<Where>" + 
            "<And><Gt><FieldRef Name = 'ID'/><Value Type='Counter'>0</Value></Gt>" + 
            "<Eq><FieldRef Name = 'Title'/><Value Type = 'Text'>" + AccountNumber + "</Value></Eq>" + 
            "</And>" + 
           "</Where>"; 
       viewFields.InnerXml = ""; 
       queryOptions.InnerXml = ""; 

       /* Declare an XmlNode object and initialize it with the XML response 
       from the GetListItems method. The last parameter specifies the GUID 
       of the Web site containing the list. Setting it to null causes the 
       Web site specified by the Url property to be used.*/ 

       try 
       { 
        XmlNode nodeListItems = 
         listService.GetListItems 
         (listName, string.Empty, query, viewFields, "0", queryOptions, null); 

        if (nodeListItems != null) 
        { 
         /*Loop through each node in the XML response and get data.*/ 
         foreach (XmlNode listItem in nodeListItems) 
         { 
          var Phone = "No phone number"; 

          if (listItem.Name == "rs:data") 
          { 
           for (int f = 0; f < listItem.ChildNodes.Count; f++) 
           { 
            if (listItem.ChildNodes[f].Name == "z:row") 
            { 
             Phone = listItem.ChildNodes[f].Attributes["ows_Telephone"].Value.TrimEnd('0', '.'); 
             retvalue = Phone; 
            } 

           } 
          } 
         } 
        } 

        if (retvalue == "") retvalue = "No result found."; 
       } 
       catch (WebException ex) 
       { 
        retvalue = ex.Message; 
       } 
      } 
      catch (WebException ex) 
      { 
       retvalue = ex.Message; 
      } 
      catch (Exception ex) 
      { 
       retvalue = ex.Message; 
      } 

      return retvalue; 
     } 
+0

私は本当の問題を発見したことはありません。私はCSOMを使用して終了し、それは私が行ったものですので、うまく機能しました。これはまだ私にはバグです。 – CMason

答えて

0

私は偶然だけrtFaFedAuthクッキーをロードしますが、成功したサインインからクッキーの残りの部分をロードしていなかったことが分かりました。それは私があなたが説明したエラーを引き起こすことが判明しました。セッションからのすべてのクッキーを取得することで、問題が改善されました。

関連する問題