2012-04-04 82 views
1

好吧,請稍微混淆這是如何與wcf Web服務一起使用的。關係爲Web服務?

程序
組(組ID)
標籤(TagsID)
用戶(用戶名)

現在讓我們說組與方案有關的,標籤(與ID相關聯)還與與其相關的組和用戶相關聯。

例如集團CSHARP與計劃計算和標籤web服務休息但其餘的標籤也與集團asp.net我怎麼回報相關聯的所有團體有關的相關休息?

我:

IGroupService
IProgrammeService
ITagService
IUsers

如何將兩者聯繫起來,回到屬於相關標籤等組和用戶組?

+1

不知道我明白這個問題。你是否試圖通過一次調用將所有這些信息返回給服務,並想知道具有所有這些關係(以及最可能的循環引用)的此類對象圖的數據契約是什麼? – 2012-04-04 20:13:40

+0

@KevinJunghans:把它作爲答案。 – 2012-04-05 07:55:24

回答

1

不知道我明白這個問題。你是否試圖通過一次調用將所有這些信息返回給服務,並想知道具有所有這些關係(以及最可能的循環引用)的此類對象圖的數據契約是什麼?

我可能對這個問題與最新的信息有點混淆,但是我會最後一次嘗試這個。我想,更令人困惑的是對「實體」一詞的提及。這是一個EF問題嗎?如果鏈接是EF的一個問題,我只能假設正在採用代碼優先的方法。將羣組鏈接到標籤的示例看起來像這樣。

public class Group 
    { 
     public Group() 
     { 
      Tags = new List<Tag>(); 
     } 
     public string Name { get; set; } 
     public List<Tag> Tags { get; set; } 
    } 

    public class Tag 
    { 
     public string Name { get; set; } 
    } 

要查詢具有使用LINQ,你會做這樣的事情特定標籤的所有組:

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

如果您正在使用SOAP,你會在你的客戶端創建一個代理並調用服務應該是這樣的:

 string tagName = "rest"; 
     List<Group> groups = proxy.GetGroups(tagName); 

如果要創建一個REST API那麼這將是一個簡單的HTTP請求:

http://server/api/GetGroups?tagName=rest 

服務將返回表示組的XML或JSON的服務。

您列出了許多我認爲包含您的服務的操作和數據合約的接口。您不一定需要由實體破壞您的服務,並且可能會對將某些操作和數據合同放在哪裏造成混淆。如果服務返回多個實體的信息,則需要在整個服務中重複數據合同。實體中斷服務不會帶來太多好處,只會讓您和服務的任何用戶更加困難。

+0

是的,但並非全部都在一個電話中。你能提供一個小例子嗎? – 2012-04-05 12:27:21

+0

我還沒有足夠的信息來提供示例。在WCF中使用哪種類型的綁定?這是一個RESTful API還是使用SOAP?關係中對象的完整定義是什麼?如果你不想在一次通話中提供所有信息,你怎麼把它們分開?你有沒有定義你的運營合同?如果是這樣,它是什麼?你試過什麼部分,你究竟粘在了什麼? – 2012-04-05 13:40:37

+0

我只是指你如何鏈接實體?那麼你會怎樣稱呼它的一個小例子? – 2012-04-05 17:51:03