WCF 事件声明

标签 wcf

我看到 WCF 不直接使用事件,而是使用 OneWay 委托(delegate)调用,但是有人可以向我展示一个简单的示例来说明如何执行此操作吗?

这是我现在的设置:

    [OperationContract(IsOneWay = true)]
    void OnGetMapStoryboardsComplete(object sender, List<Storyboard> results);

最佳答案

假设您的回调协定接口(interface)被称为IMyServiceCallback,您的服务将在它想要引发事件时执行以下代码:

IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
callback.OnGetMapStoryboardsComplete(...);

我找到了 this article非常有帮助。它描述了 transient 事件系统和持久事件系统,IMO 中的任何一个都应该满足任何和所有事件场景。

HTH

设置回调合约:

interface IMyServiceCallback
{
    [OperationContract(IsOneWay = true)]
    void OnGetMapStoryboardsComplete(object sender, List<Storyboard>);
}

然后你需要在你的服务契约(Contract)上指明它正在使用这个回调:

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
interface IMyService
{
    // ...
}

完成该操作并实现您的服务后,创建对该服务的引用。然后,客户端必须包含一个实现 IMyServiceCallback 的类:

class EventHandler : IMyServiceCallback
{
    public void OnGetMapStoryBoardsComplete(object sender, List<Storyboard>)
    {
        // Do whatever needs to be done when the event is raised.
    }
}

当您从客户端连接到服务时,您需要向其传递一个InstanceContext,该InstanceContext是使用对将处理事件的对象的引用构建的:

EventHandler eventHandler = new EventHandler();
MyServiceClient client = new MyServiceClient(new InstanceContext(eventHandler));

这有意义吗?

关于WCF 事件声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143743/

相关文章:

wcf - 什么是面向服务的架构?

wcf - 电话模拟器可以调用附加了 Fiddler 的 WCF 服务,否则会抛出 NotFound 异常

javascript - Angular JS 无法显示行的总计

c# - 如何使用 DataContractJsonSerializer 将类类型而不是命名空间序列化为 Json 字符串

负载均衡服务器中的WCF回调

c# - 使 ASP.NET WCF 将字典转换为 JSON,省略 "Key"和 "Value"标记

调用 WCF 的 Java 应用程序返回 "Connection Reset",而 SoapUI 工作正常

c# - 构建队列服务 - 序列化任务供以后使用

WCF - 是否有可能测试 WCF 安全加密等确实发生?

c# - 如何从 json 序列化中排除特定类型