2010-02-03 2 views
1

Я действительно новичок в веб-сервисах и вам необходимо создать веб-сервис, который может работать с объектными графами. Мой канонический пример будет веб-службой CRM, которая с учетом номера клиента вернет «объект» типа «Компания» со свойством коллекции «Контакты».Графики объектов и веб-сервисы

т.е.

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

будет возвращать экземпляр:

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

Было бы очень хорошо, чтобы быть в состоянии создать веб-сервиса, так что он легко может потребляться из Visual Studio, так что он может работать непосредственно с компанией и связанными с ней контактами ...

Возможно ли это?

Благодаря Фредрик

+0

Хотя явно не связана с этим я бы рекомендовал смотреть на NHibernate, чтобы сделать фактическую обработку запросов данных, что ваши доходы обслуживания, я признаю, шаблоны управления сеансами ФОС и NH являются довольно сложными. –

+0

Спасибо, но у меня есть все на «внутренней стороне», это для общения снаружи :-) –

ответ

1

кажется исправление в .NET Framework 3.5 SP1 которым добавлена ​​поддержка атрибута IsReference на DataContract именно то, что мне нужно!

так что я могу написать:

[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, вы бы лучше использовать Windows Communication Foundation (WCF). При этом, вы можете определить Данные контракты с атрибутами, как это:

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

Есть ли поддержка инструмента в потребительской стороне, которая поймет «график» там, чтобы его можно было использовать «как есть», вызывающим? Кроме того, если контакт обладает таким свойством, как ParentCompany, это поддерживается, я где-то читал, что круговые зависимости не работают? Спасибо –

+0

Кроме того, можно ли применять эти атрибуты динамически, так как моя компания и Контакт действительно являются «сущностями» того же типа «Entity», но с различными свойствами, доступными через ICustomTypeDescriptor? –

+0

Да, есть поддержка инструментов в Visual Studio 2008+. Я добавил ссылку, где вы можете прочитать больше. –