2010-02-03 64 views
1

我對web服務非常陌生,需要創建一個可以處理對象圖的web服務。我的典型例子是一個CRM Web服務,給定一個客戶編號將返回一個類型爲Company的「對象」,並具有Contacts的集合屬性。對象圖和網絡服務

即:

[WebService] 
public Company GetCompanyByCustomerNumber(string customerNumber) {...} 

將返回的實例:

public class Company 
{ 
.... 
    public List<Contact> Contacts { get { ... } } 
} 

這將是非常好的能夠創建web服務,以便它可以輕鬆地從Visual Studio,使消費它可以直接與公司和相關聯繫人...

這可能嗎?

感謝 弗雷德裏克

+0

雖然沒有明確涉及到這一點,我會建議看NHibernate的做數據的實際查詢您的服務回報,我承認WCF的會話管理模式和NH相當複雜。 – 2010-02-03 13:49:55

+0

謝謝,但我有「內部」一切,這是爲了與外部溝通:-) – 2010-02-03 13:55:12

回答

1

似乎在.NET Framework中的修復3.5 SP1至極增加了對DataContract的IsReference屬性支持,正是我所需要的!

所以我可以這樣寫:

[DataContract(IsReference=true)] 
public class Contact 
{ 
    Company parentCompany; 
    [DataMember] 
    public Company ParentCompany 
    { 
     get { return parentCompany; } 
     set { parentCompany = value; } 
    } 

    string fullName; 
    [DataMember] 
    public string FullName 
    { 
     get { return fullName; } 
     set { fullName = value; } 
    } 
} 

[DataContract(IsReference = true)] 
public class Company 
{ 
    string name; 
    [DataMember] 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    List<Contact> contacts = new List<Contact>(); 
    [DataMember] 
    public List<Contact> Contacts 
    { 
     get { return contacts; } 
    } 
} 

感謝所有讓我在正確的方向上的幫助!

//弗雷德裏克

2

相反的ASMX Web服務,你會使用Windows Communication Foundation(WCF)會更好。有了這一點,你可以定義數據契約,像這樣的屬性:

[DataContract] 
public class Company 
{ 
    [DataMember] 
    public Contact[] Contacts { get; set; } 
} 
+0

是否有消費者方面的工具支持,將瞭解那裏的「圖形」,因此它可以「按原樣」使用,由來電者?另外,如果聯繫人有一個像ParentCompany這樣的屬性,那麼我會在某處閱讀循環依賴關係不起作用的地方。 謝謝 – 2010-02-03 13:53:15

+0

此外,是否有可能動態應用這些屬性,因爲我的公司和聯繫人確實是同一種「實體」的「實體」,但具有可通過ICustomTypeDescriptor獲得的不同屬性? – 2010-02-03 13:58:57

+0

是的,在Visual Studio 2008+中有工具支持。我添加了一個鏈接,你可以閱讀更多。 – 2010-02-03 14:03:18