2010-02-17 2 views
2

Добрый день. Раньше я никогда не писал на этих сайтах, но давайте посмотрим, как это происходит.Сервисные клиенты WCF

Сегодня я начал работать с WCF в первый раз, я просмотрел несколько скринкастов, и теперь я готов перейти в свое первое решение, реализующее его. Все хорошо, и пока все работает, хотя мой вопрос возникает, когда я создаю WCFServiceClient в своей вызывающей программе/клиенте.

Скажем, в моем ServiceContract/interface, определяющем мои методы, выставленные клиенту, существует множество методов, связанных с каким-либо объектом объекта. Как я могу логически группировать все связанные с ним методы конкретной сущности, так что в моем коде это будет выглядеть так:

например.

WCFServiceClient.Entity1.Insert(); 
WCFServiceClient.Entity1.Delete(); 
WCFServiceClient.Entity1.GetAll(); 
WCFServiceClient.Entity1.GetById(int id); 

WCFServiceClient.Entity2.AddSomething(); 
WCFServiceClient.Entity2.RemoveSomething(); 
WCFServiceClient.Entity2.SelectSomething(); 

...

Вместо

WCFServiceClient.Insert(); 
WCFServiceClient.Delete(); 
WCFServiceClient.GetAll(); 
WCFServiceClient.GetById(int id); 
WCFServiceClient.AddSomething(); 
WCFServiceClient.RemoveSomething(); 
WCFServiceClient.SelectSomething(); 

Я надеюсь, что это имеет смысл. Я искал google, я пробовал свои логические рассуждения, но не повезло. Любые идеи были бы хорошы.

Выстрел Juan

+0

Добро пожаловать! При отправке кода нажмите кнопку «Формат» на панели инструментов ('101'), чтобы отформатировать ее правильно. – SLaks

ответ

0

WCFServiceClient.Entity1.Insert();

WCFServiceClient.Entity2.AddSomething();

Это пахнет, как два отдельных сервисных интерфейсов - пусть каждый контракт на обслуживание (интерфейс) обрабатывать все методы, необходимые для одного типа объекта:

[ServiceContract] 
interface IEntity1Services 
{ 
    [OperationContract] 
    void Insert(Entity1 newEntity); 
    [OperationContract] 
    void Delete(Entity1 entityToDelete); 
    [OperationContract] 
    List<Entity1> GetAll(); 
    [OperationContract] 
    Entity1 GetById(int id); 
} 

[ServiceContract] 
interface IEntity2Services 
{ 
    [OperationContract] 
    void AddSomething(Entity2 entity); 
    [OperationContract] 
    void RemoveSomething(Entity2 entity); 
    [OperationContract] 
    SelectSomething(Entity2 entity); 
} 

Если вы хотите, вы можете иметь один класс обслуживания, фактически реализующий оба интерфейса - это вполне возможно и справедливо.

class ServiceImplementation : IEntity1Services, IEntity2Services 
{ 
    // implementation of all seven methods here 
} 

Или вы можете создать два отдельных класса реализации обслуживания - это полностью зависит от вас.

class ServiceImplementation1 : IEntity1Services 
{ 
    // implementation of four methods for Entity1 here 
} 

class ServiceImplementation2 : IEntity2Services 
{ 
    // implementation of three methods for Entity2 here 
} 

Это вообще помогает?

+0

Да, большое спасибо. Вчера я создал частичный класс, каждая реализация класса, реализующая другой servicecontract, а также создание конечной точки для каждого контракта под одной и той же службой. – Juan

2

Вы не можете сделать это. Лучшее, что вы можете сделать, это поместить все методы «сущность 1» в один контракт на обслуживание и все методы «сущность 2» в другой. Одна служба может выполнять несколько контрактов на обслуживание.

+0

Это был бы мой следующий план, однако это значит, что в моем клиенте мне нужно будет добавить еще одну ссылку в web.config для Service2 правильно? – Juan

+0

@Juan: нет. Это одна услуга с двумя контрактами. –

+0

Хорошо, тогда я немного потерял. В редакторе конфигурации службы WCF, как я могу настроить эту службу для нескольких контрактов? – Juan

Смежные вопросы