我在现有的WCF服务中添加了一个回调接口方法,但是更新我的服务引用我没有看到它

时间:2014-04-01 18:18:08

标签: c# web-services wcf visual-studio service

我最近在我的服务中添加了一个ping方法,该方法在回调通道上调用pong方法:

public partial class myService
{
    public void Ping()
    {
        OperationContext.Current.GetCallbackChannel<IKeepAliveEvents>().Pong();
    }
}

我还在pong方法中添加了回调接口:

namespace myService
{
    [ServiceContract]
    public interface IKeepAliveEvents
    {
        [OperationContract(IsOneWay = true)]
        void Pong();
    }
}

在我的WCF服务的主界面定义中继承了哪些:

[ServiceContract]
public interface IMyServiceEvents : IEvents1, IEvents2, ..., IEvents9, IKeepAliveEvents
{
    [OperationContract(IsOneWay = true)]
    void TestEvent(string s);
}

然后使用如下:

[ServiceContract(CallbackContract=typeof(IMyServiceEvents)]
public interface IMyService : ISomething1, ISomething2, ..., ISomething13
{
    ...
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = 2147483647)]
public partial class myService : IMyService, IDisposable, IServiceBehavior, IErrorHandler {
    ...
}

问题是......当我的WCF服务运行时,它不会让我从接口定义中实现我的客户端应用程序中的pong方法,因为每次我尝试更新服务时它似乎都不存在...并且我确定我正在使用正确的URL更新正确的服务,并确保我使用最新版本的代码,因为我已经能够将调试器附加到我的服务并在Ping方法中放置一个断点它叫Pong。更奇怪的是,Ping方法确实存在让我的客户端使用它,但是Pong方法似乎不想在客户端上显示:

public partial class myClientEndpoint : myServiceCallback {
    // I would expect Pong to be implementable here.
}

问题是什么?

1 个答案:

答案 0 :(得分:0)

答案实际上是我的IKeepAlive ServiceContract(包含Ping方法)没有将自己的回调契约引用为IKeepAliveEvents ...就像这样:

[ServiceContract(CallbackContract=typeof(IKeepAliveEvents))]
public interface IKeepAlive
{
    [OperationContract(IsOneWay = true)]
    public void Ping();
}

在MyServiceContract上指定[ServiceContract(CallbackContract=typeof(IMyServiceEvents)]是不够的。继承只是不会以这种方式与WCF一起工作。