Я создаю приложение с 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();
}
}
Вам нужно добавить атрибут [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, я просто ссылался, добавив ссылку на службу в проект.
Вы пытались добавить тег [ServiceContract] в ITestCallback?