使用ChannelFactory调用异步WCF而不使用服务引用

时间:2013-07-15 16:08:45

标签: c# wcf channelfactory

我正在使用 .NET 3.5 This是一个相关的问题,但使用TPL异步库,因为我在3.5我需要另一种方法。

我曾经通过添加服务引用并使用Visual Studio 2010创建异步操作来异步调用WCF。

现在我使用CreateChannel<T>类的ChannelFactory创建了动态代理,我需要以异步方式调用方法。这就是我创建WCF代理的方式:

    public MyInterface Proxy { get; set; }

    BasicHttpBinding binding = new BasicHttpBinding();
    EndpointAddress ep = new EndpointAddress("http://localhost/myEndpoint");
    Proxy = ChannelFactory<MyInterface>.CreateChannel(binding, ep); 

    // I call my method
    Proxy.MyMethod();

    [ServiceContract]
    public Interface MyInterface
    {
      [OperationContract]
      void MyMethod();
    }

我不需要服务响应。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确,但是如果你想让你的Proxy.MyMethod通过.NET 3.5运行异步,你可以使用Delegate类的标准BeginInvoke,如下所示:

 //Make a delegate for your Proxy.MyMethod
 private delegate void MyDelegate();

然后在代码中,您只需将方法调用为异步:

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress ep = new EndpointAddress("http://localhost/myEndpoint");
Proxy = ChannelFactory<MyInterface>.CreateChannel(binding, ep); 
var delInstance = new MyDelegate(Proxy.MyMethod);
var result = delInstance.BeginInvoke();

如果您需要检查有关结果的内容,请使用结果变量