Преобразование класса Proxy в общий интерфейс со службами WCF - PullRequest
3 голосов
/ 11 мая 2010

Я пытаюсь создать общую библиотеку служб, совместно используемую веб-службой WCF и локальной службой данных. Тем не менее, при попытке использовать сервис, нажав на

Проект -> Добавить ссылку на сервис

и затем, пытаясь использовать базовый интерфейс вместо интерфейса прокси, я получаю ошибку приведения со следующим кодом:

IMyService _context = (IMyService)new ServiceReference.MyService();

Вот макет проектов / классов:

Проект общей библиотеки

[ServiceContract]
public interface IMyService
{
     [OperationContract]
     void DoWork();
}

Проект веб-службы

public partial class MyService : IMyService
{
    public void DoWork()
    {
    //DO STUFF
    }
}

Клиентский проект

IMyService _context = (IMyService)new ServiceReference.MyService();

выдана ошибка времени выполнения: невозможно преобразовать объект.

IMyService _context = new ServiceReference.MyService();

выдана ошибка времени компиляции: явное приведение отсутствует.

(обратите внимание, что клиентский проект ссылается на проект Common Library)

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

Если вы контролируете обе стороны провода, вы также можете создать динамический прокси через код. Вы можете работать без сгенерированного прокси через добавление веб-ссылки. Для моей компании это работает лучше, так как изменения в интерфейсе будут отображаться непосредственно во время компиляции на нашем сервере сборки. Когда мы использовали веб-ссылки, эти разрывы интерфейса появлялись во время тестирования нашего приложения.

Это то, что мы используем для динамической генерации прокси. Может быть, это также может работать для вашего сценария.

  private void CreateDynamicProxy()
  {
     var endPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(TServerInterface)), new BasicHttpBinding(), new EndpointAddress(EndpointAddress));
     var channelFactory = new ChannelFactory<IMyInterface>(endPoint);
     IMyInterface myInterface = channelFactory.CreateChannel();
     myInterface.MyMethod();
     ((IChannel) myInterface).Close();
  }
0 голосов
/ 11 мая 2010

Не следует приводить его, поскольку возвращаемый класс реализует интерфейс, просто удалите приведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...