使用ChannelFactory在没有服务引用的情况下调用异步WCF

本文关键字:情况下 调用 异步 WCF 引用 服务 ChannelFactory 使用 | 更新日期: 2023-09-27 18:22:20

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

我过去常常通过添加服务引用并使用VisualStudio2010创建其异步操作来异步调用WCF。

现在,我已经使用ChannelFactory类的CreateChannel<T>创建了一个动态代理,并且我需要以异步方式调用一个方法。这就是我创建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();
    }

我不需要服务响应。

使用ChannelFactory在没有服务引用的情况下调用异步WCF

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

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

然后在代码中,您只需调用方法async:

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();

如果您需要检查一些关于结果的信息,请为此使用result变量