Унаследованные контракты WCF

2

Я создаю приложение с WCF, и я пытаюсь определить обратный вызов Контракт с интерфейсом, который происходит от другого. Таким образом, сгенерированный прокси-код (с использованием svcutil.exe) не видит базы интерфейс и "NotSupportedException" выбрасывается на Сервер при попытке для вызова методов, определенных в базовом интерфейсе.

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

Кто-нибудь знает, почему он не работает?

Спасибо за любую помощь и извините за repost!

Вот мое определение контракта:

namespace wcfContract
{

    [ServiceContract(Namespace = "Test")]
    public interface IPing
    {
        [OperationContract]
        void Ping();
    }

    public interface ITestCallback : IPing      
    //<-------------- IPing method not seen  at all in proxy
    {
        [OperationContract]
        void TestCB();
    }

    [ServiceContract(Namespace = "Test", CallbackContract =
        typeof(ITestCallback))]
    public interface ITest : IPing
    {
        [OperationContract]
        void Test();
    }
}
Теги:
wcf

2 ответа

6
Лучший ответ

Вам нужно добавить атрибут [ServiceContract] в интерфейс ITestCallback.

[ServiceContract]
public interface ITestCallback : IPing
{
    [OperationContract]
    void TestCB ();
}

Класс сервиса должен наследовать производный контракт (т.е. ITestCallback).

public class Service1 : ITestCallback
{
    ...
}

Соответствующая привязка конечной точки в файле Web.config должна указывать правильный контракт (как в адресе конечной точки для "ws" ниже).

<services>
  <service name="WcfService.Service1" behaviorConfiguration="WcfService.Service1Behavior">
    <!-- ITestCallback needs to be the contract specified -->
    <endpoint address="ws" binding="wsHttpBinding" contract="WcfService.ITestCallback">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>

Это сработало для меня; надеюсь, что это сработает для вас. Я не использовал svcutil, я просто ссылался, добавив ссылку на службу в проект.

2

Вы пытались добавить тег [ServiceContract] в ITestCallback?

  • 0
    Я сделал - безрезультатно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню