WCF合同继承合同

时间:2009-06-05 17:29:39

标签: c# .net wcf

我正在使用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 个答案:

答案 0 :(得分: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,我只是通过在项目中添加服务引用来引用。

答案 1 :(得分:2)

您是否尝试将[ServiceContract]标记添加到ITestCallback?