リモート共有ポイントリストからアイテムを取得するコードを記述しました。スタンドアロンの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;
}
私は本当の問題を発見したことはありません。私はCSOMを使用して終了し、それは私が行ったものですので、うまく機能しました。これはまだ私にはバグです。 – CMason