2012-04-07 40 views
2

我想我的GET方法有問題,因爲我在嘗試運行一段客戶端代碼時沒有返回任何內容。客戶端GET請求不返回任何東西?

我GET操作的合同是這樣的:

[OperationContract] 
    [WebInvoke(Method = "GET", 
    BodyStyle = WebMessageBodyStyle.Bare, 
    RequestFormat = WebMessageFormat.Xml, 
    ResponseFormat = WebMessageFormat.Xml, 
    UriTemplate = "/Group/{TagName}")] 
    List<Group> GetGroupsCollection(string TagName); 

    public List<Group> GetGroupsCollection(string TagNames) 
    { 
     List<Group> groups = (from g in Groups 
       where 
        (from t in g.Tags where t.TagName == TagNames select t).Count() > 0 
       select g).ToList(); 
    return groups; 
    } 

現在我沒有任何數據有,所以我必須手動添加組和標籤從我的客戶端來測試這一點,我然後嘗試添加標籤一組,我這樣做,像這樣:

[OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/AddTagtoGroup/{group}/{tag}")] 
    void AddTagtoGroup(string group, string tag); 

    public void AddTagtoGroup(string group, string tag) 
    { 
     var result = Groups.Where(n => String.Equals(n.GroupName, tag)).FirstOrDefault(); 
     if (result != null) 
     { 
      result.Tags.Add(new Tag() { TagName = tag }); 
     } 
    } 

而且從客戶端,這是這樣完成的:

private void AddTagetoGroup_Click(object sender, EventArgs e) 
    { 
     string uriAddTagtoGroup = string.Format("http://localhost:8000/Service/AddTagtoGroup/{0}/{1}", textBox6.Text, textBox7.Text); 
     byte[] arr = Encoding.UTF8.GetBytes(uriAddTagtoGroup); 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uriAddTagtoGroup); 
     req.Method = "POST"; 
     req.ContentType = "application/xml"; 
     req.ContentLength = arr.Length; 
     Stream reqStrm = req.GetRequestStream(); 
     reqStrm.Write(arr, 0, arr.Length); 
     reqStrm.Close(); 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     MessageBox.Show(resp.StatusDescription); 
     reqStrm.Close(); 
     resp.Close(); 
    } 

我回來的消息是好的,一切似乎都很好。

現在這塊客戶端代碼我得到一個問題是這樣的:

string uriGetGroupsCollection = "http://localhost:8000/Service/GetGroupsCollection/{TagName}"; 
    private void button8_Click(object sender, EventArgs e) 
    { 
     string tagUri = uriGetGroupsCollection.Replace("{TagName}", textBox8.Text); 

     XDocument xDoc = XDocument.Load(tagUri); //this line gives 404 error not found. 
     var Tag = xDoc.Descendants("Group") 
      .Select(n => new 
      { 
       Tag = n.Element("GroupName").Value, 
      }) 
      .ToList(); 
     dataGridView3.DataSource = Tag; 
    } 

這是關係到我首先提到的GET操作。所以我不確定如何找出它的客戶端代碼是否做錯了什麼或者我的實際方法是什麼GetGroupsCollection

因此,無論我的問題是有關添加標籤到組:

public void AddTagtoGroup(string group, string tag) 
    { 
     var result = Groups.Where(n => String.Equals(n.GroupName, tag)).FirstOrDefault(); 
     if (result != null) 
     { 
      result.Tags.Add(new Tag() { TagName = tag }); 
     } 
    } 

或其相關爲GetGroupsCollection客戶端代碼?

我更新了我的問題,以反映我以前得到哪個surfen解決的小錯誤(404錯誤),但這沒有解決我沒有得到任何回報的問題?

+0

希望這是好的,清晰,奠定了良好的任何問題,不要猶豫,問。 – 2012-04-07 16:34:36

+0

您可以使用[Fiddler](http://www.fiddler2.com/)查看原始/文本客戶端http請求/響應。 – Eugene 2012-04-07 16:45:20

+1

您也可以使用Visual Studio調試器來破壞像AddTagtoGroup這樣的方法中的代碼執行,檢查變量,檢查列表內容和程序流程。 – surfen 2012-04-07 18:01:16

回答

2

我認爲你犯了一個錯誤在你的網址:

string uriGetGroupsCollection = "http://localhost:8000/Service/GetGroupsCollection/{TagName}"; 

因爲你定義你的URITemplate這樣的:"/Group/{TagName}"

[OperationContract] 
[WebInvoke(Method = "GET", 
BodyStyle = WebMessageBodyStyle.Bare, 
RequestFormat = WebMessageFormat.Xml, 
ResponseFormat = WebMessageFormat.Xml, 
UriTemplate = "/Group/{TagName}")] 
List<Group> GetGroupsCollection(string TagName); 

所以你在客戶端的URL應該是這樣的:

string uriGetGroupsCollection = "http://localhost:8000/Service/Group/{TagName}"; 

OR變化您URITemplate到:

UriTemplate = "/GetGroupsCollection/{TagName}")] 

UPDATE

AddTagtoGroup還有一個錯字。

var result = Groups.Where(n => String.Equals(n.GroupName, tag)).FirstOrDefault(); 

應該是:

var result = Groups.Where(n => String.Equals(n.GroupName, group)).FirstOrDefault(); 
+0

很好地發現!沒有404錯誤的問題,但沒有發生,當我點擊按鈕,沒有錯誤,沒有返回? – 2012-04-07 17:32:55

+1

@Garrith我已經更新了答案 – surfen 2012-04-07 17:59:03