订阅由WCF服务提供的事件

时间:2015-07-29 18:36:42

标签: c# wcf event-handling

我有一个第三方应用程序,我通过他们正在公开的WCF服务与之交互。当我的应用程序加载时,WCF服务应该挂钩到我定义的回调并返回给我数据。这在VB中是直截了当的,但我认为我的问题是在C#中实现这一点的语法。

他们的文档说明了以下内容:Your user control will need to define an internal event with a signature that matches the event that our service is listening for.

以下是我对处理程序的声明,由此服务的文档提供:

public delegate void MyDel(ref string Param1, ref string Param2);
public event MyDel GetInfo;

然后文档说我应该能够以下列方式调用此事件,并且我需要从服务中获取的数据将在我通过引用传递的output变量内部:

string output = "";
string methodName = "SpecificAction"

// this is null and throws an exception
// i've tried wrapping it in an if != null block to no avail
GetInfo(ref methodName, ref output);
Console.WriteLine(output.ToString());

在VB中,以下工作没有问题:

Public Event GetInfo (ByRef EventName As String, ByRef XmlString As String)
Dim Output As String = ""
RaiseEvent GetInfo("SpecificAction", Output)

我认为我对C#语法做错了的原因是,正如我所说,它似乎在VB中工作得很好。任何建议将不胜感激。

更新

所以我从我的控件的公共构造函数中调用这个方法,这是失败的。例如,如果我在按钮单击处理程序中移动此确切代码,它将返回我期望的数据。我猜我的程序正在初始化并在他们的服务挂钩之前点击该调用?有没有办法等待这种情况发生?

1 个答案:

答案 0 :(得分:0)

当我从构造函数中删除它并将其放在按钮单击处理程序中时,看到上面的代码工作后,我意识到问题可能是我试图在服务挂钩之前访问数据。通过将代码置于我的控件Load事件中,我能够获取所需的数据。