Я ищу способ иметь сгенерированный прокси-класс для веб-ссылки (не 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 было может работать в двух разных режимах:
Для этого мы создали интерфейс 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
}
}