прокси-класс веб-службы для реализации интерфейса

Я ищу способ иметь сгенерированный прокси-класс для веб-ссылки (не WCF) реализует общий интерфейс, чтобы легко переключаться между доступом к веб-службе и «прямым» доступом к нашему бизнес-уровню в клиентском приложении, примерно так:

public IBusiness GetBusinessObject()
{
  if (_mode = "remote")
    return new BusinessWebService.Business(); // access through web service proxy class
  else
    return new Business(); // direct access
}

Однако настраиваемые типы (например, CustomSerializableType в примерах ниже) не упоминаются в сгенерированном классе прокси. Вместо этого генерируются новые идентичные типы, что делает невозможным реализацию интерфейса прокси-классом.

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


Подробности

Наше решение состоит из следующих четырех проектов:

  • Бизнес-библиотека (содержит бизнес-логику, обращается к хранилищу данных)
  • Общая библиотека ( содержит общие функции, включая CustomSerializableType )
  • Веб-сервис (действует как прокси между удаленными клиентами и бизнес-уровнем)
  • Приложение Windows

Наш клиент хочет, чтобы приложение Windows было может работать в двух разных режимах:

  • Локальный режим, в котором приложение просто использует бизнес-библиотеку напрямую для доступа к данным
  • Удаленный режим, где приложение связывается с веб-службой для доступа к данным

Для этого мы создали интерфейс IBusiness, который находится в общей библиотеке и содержит все бизнес-методы.

Интерфейс

public interface IBusiness
{
  CustomSerializableType DoSomeWork();
}

Бизнес-уровень

public class Business : IBusiness
{
  public CustomSerializableType DoSomeWork()
  {
    // access data store
  }
}

Веб-служба

public class WebServiceBusiness : IBusiness
{
  private Business _business = new Business();

  [WebMethod]
  public CustomSerializableType DoSomeWork()
  {
    return _business.DoSomeWork();
  }
}

Созданный прокси-класс (тонна кода оставлена ​​для удобства чтения)

public partial class Business
  : System.Web.Services.Protocols.SoapHttpClientProtocol
{

  public CustomSerializableType DoSomeWork()
  {
    // ...
  }

  public partial class CustomSerializableType {
    // PROBLEM: this new type is referenced, instead of the
    // type in the common library
  }
}
7
задан John Saunders 30 September 2010 в 19:03
поделиться