2011-12-20 4 views
0

Я попытаюсь объяснить, что я хочу в коде, потому что не может сформулировать его словами.Как реализовать концепцию службы WCF, которая инкапсулирует другие службы WCF?

У меня есть какой-то ресурс, и я инкапсулировать его использование в службе WCF, и у меня есть менеджер ресурсов, который контролирует доступ к этим ресурсам, который также является служба WCF, что-то вроде этого:

//Allows only one client to use it at the same time... 
public interface IResource 
{ 
    string GetResourceDescription(); 
    void DoWork(); 
    void BeginWork(); 
    void EndWork(); 
} 

//Governs access and location of resources 
public interface IResourceManager 
{ 
    IEnumerable<string> GetResourcesDescriptions(); 
    bool IsResourceAvailable(string resourceDescription); 
    void BeginWorkWith(string resourceDescription); 
    void DoWorkWith(string resourceDescription) 
    void EndWorkWith(string resourceDescription); 
} 

Что мне не нравится в этом коде, так это то, что при работе с IResourceManager мне нужно всегда указывать, какой ресурс я хочу использовать для работы сервиса, поэтому в основном IResourceManager имеют те же сервисные операции, что и IResource, но в качестве параметра принимает дополнительный идентификатор IResource.

Что я хочу:

public interface IResourceManager 
{ 
    IEnumerable<string> GetResourcesDescriptions(); 
    //I want it to return service proxy (ICommunicationObject) 
    IResource GetResource(string resourceDescription); 
} 

Во-первых, это невозможно, во-вторых, клиенты не могут взаимодействовать с IResource непосредственно на сетевом уровне (нет прямой связи).

До сих пор я нашел только одно не уродливое решение, чтобы создать клиентскую оболочку, которая имитирует это поведение. Как реализовать и использовать такие службы WCF?

ответ

0

Имейте в виду, что объекты, возвращенные из служебных операций, являются только данными. С другой стороны канала связи эти объекты будут «мертвыми» (будут содержать только данные, без методов). Единственный способ справиться с этим - это то, как вы его решаете. Обертка на стороне клиента звучит неплохо, и я думаю, что это разумное решение.