Мы разрабатываем приложение CRM.Вся бизнес-логика и доступ к данным проходят через сервисы WCF.У нас есть 2 варианта связи между WCF и клиентом (на данный момент: ASP.NET MVC 2)
Один из вариантов - это метод create для каждой операции.Пример
GetCustomers()
GetCustomersWithPaging(int take, int skip)
GetCustomersWithFilter(string filter)
GetCustomersWithFilterPaging(string filter, int take, int skip)
or // new .net 4 feature
GetCustomers(string filter = null, int take = 0, int skip = 0)
... list goes..
Другим вариантом является создание общей отдельной сервисной операции с именем
Response InvokeMessage (Messege request) .Пример
wcfservice.InvokeMessage(
new CustomerRequest {
Filter = "google",
Paging = new Page { take = 20, skip = 5}
});
// Service Implementation.
public Response InvokeMessage(Message request)
{
return request.InvokeMessage();
}
InvokeMessage = общий одиночный сервисный вызов для всех операций.
CustomerRequest = Унаследованный класс от Сообщение абстрактный класс, поэтому я могу создавать несколько классов из базового класса сообщений в зависимости от требований ввода.Вот класс CustomerRequest.
public class CustomerRequest : Message
{
public string Filter {get;set;}
public Page Paging {get;set} // Paging class not shown here.
Public override Response InvokeMessage()
{
// business logic and data access
}
}
EDIT
public abstract class Message
{
public abstract Response InvokeMessage();
}
// все вызовы службы будут выполняться только через метод InvokeMessage, но с другими запросами сообщений.
По сути, я мог бы избежать закрытия каждого вызова службы и прокси-сервера и т. Д. Одним из непосредственных последствий этого подхода является то, что я не могу использовать эту службу как REST
Каков рекомендуемый подход, если службе требуется вызывать лотыметодов?
спасибо.