2009-06-05 4 views
2

WCF로 응용 프로그램을 프로토 타입하는 중이고 콜백을 정의하려고합니다. 다른 인터페이스에서 파생 된 인터페이스로 계약합니다. 이렇게하면 생성 된 프록시 코드 (svcutil.exe 사용)에 인터페이스가 표시되지 않고 을 기본 인터페이스에 정의 된 메서드를 호출 할 때 서버에 "NotSupportedException"이 throw됩니다.WCF 계약 상속 된 계약

프록시 클래스 의 기본 인터페이스를 수동으로 정의하여 클라이언트에서 동일한 방식으로 메소드를 구현할 수있게하려고했습니다.

왜 작동하지 않는 사람이 있습니까?

도움 주셔서 감사합니다. 재 게시 용으로 사과드립니다.

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

답변

6

ITestCallback 인터페이스에 [ServiceContract] 특성을 추가해야합니다.

[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을 사용하지 않았고, 방금 프로젝트에서 서비스 참조를 추가하여 참조했다.

+0

대단히 감사합니다! –

2

당신이 [의 ServiceContract] 태그 ITestCallback 수를 추가하려고 했나 : 여기

내 계약의 정의인가?

+0

나는 해냈어. –

관련 문제