Лучшая архитектура для нескольких клиентов, использующих один веб-сервис - PullRequest
2 голосов
/ 13 октября 2010

У меня есть веб-сервис и несколько клиентов, которые будут его использовать.Веб-сайт MVC 2.0, приложение winforms и потенциально мобильные приложения.

Я понимаю, что в случае мобильных приложений каждому приложению потребуется внутренний доступ к веб-сервису и управление им.Но что мне делать с приложениями .net?Я использую составные типы для объекта запроса и возвращаемого типа.Вот пример.

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

Это мой абстрактный запрос.У меня есть все общие свойства, которые нужны каждому запросу.

[DataContract]
    public abstract class RequestBase : IRequest
    {
        #region IRequest Members

        [DataMember]
        public string ApiKey { get; set; }

        [DataMember]
        public string ApiPassword { get; set; }

        [DataMember]
        public int PageSize { get; set; }

        [DataMember]
        public int PageIndex { get; set; }

        #endregion

        public RequestBase() : this(String.Empty, String.Empty) { }

        public RequestBase(string apiKey, string apiPassword)
        {
            ApiKey = apiKey;
            ApiPassword = apiPassword;
        }
    }

Тогда вот класс, который наследуется от моего базового класса.

[DataContract]
    public class CustomerRequest : RequestBase
    {
        [DataMember]
        public int Id { get; set; }
    }

И вот мой объект Response.Я использую Generics, потому что каждый ответ один и тот же, за исключением типа набора результатов.

[Serializable]
public class Response<T>
{
    public IEnumerable<T> Results { get; set; }
    public int TotalResults { get; set; }
    public int PageIndex { get; set; }
    public int PageSize { get; set; }
    public RulesException Exception { get; set; }
}

Проблема в том, что когда я создавал веб-ссылку, он преобразовывал типы, принятые / возвращаемые моей службой, в прокси-объекты.

Когда я использовал ссылку на службу (в отличие от веб-ссылки), она, казалось, работала лучше, за исключением того, что была предоставлена ​​ссылка на службу, что далеко не идеально.

Я ищуза любые идеи, которые уменьшат дублирование кода.

1 Ответ

1 голос
/ 13 октября 2010

Не используйте ни один! Используйте WCF для подключения к веб-службе путем создания и кэширования ChannelFactory, а затем каждый раз создавайте прокси-сервер. WCF идеально подходит для доступа к веб-сервисам. Таким образом, вам не нужно никаких ссылок.

...