Унаследованные контракты WCF - PullRequest
2 голосов
/ 05 июня 2009

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

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

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

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

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

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();
    }
}

Ответы [ 2 ]

6 голосов
/ 05 июня 2009

Вам потребуется добавить атрибут [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 голосов
/ 05 июня 2009

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

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