怎么对WCF异步调用进行服务操作

本篇内容主要讲解“怎么对WCF异步调用进行服务操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么对WCF异步调用进行服务操作”吧!

我将服务契约的定义单独形成了一个程序集,并在客户端直接引用了它。然而,在这样的服务契约程序集中,是没有包含异步方法的定义的。因此,我需要修改在客户端的服务定义,增加操作的异步方法。这无疑为服务契约的重用带来障碍。至少,我们需要在客户端维持一份具有异步方法的服务契约。

所幸,在客户端决定采用WCF异步调用用我所设计的服务操作时,虽然需要修改客户端的服务契约接口,但并不会影响服务端的契约定义。因此,服务端的契约定义可以保持不变,而在客户端则修改接口定义如下

[ServiceContract]  public interface IDocumentsExplorerService  {  [OperationContract]  Stream TransferDocument(Document document);  [OperationContract(AsyncPattern = true)]  IAsyncResult BeginTransferDocument(Document document,  AsyncCallback callback, object asyncState);  Stream EndTransferDocument(IAsyncResult result);  }

注意,在BeginTransferDocument()方法上,必须在OperationContractAttribute中将AsyncPattern属性值设置为true,因为它的默认值为false。

WCF异步调用方式如下:

BasicHttpBinding binding = new BasicHttpBinding();  binding.SendTimeout = TimeSpan.FromMinutes(10);  binding.TransferMode = TransferMode.Streamed;  binding.MaxReceivedMessageSize = 9223372036854775807;  EndpointAddress address = new EndpointAddress  ("http://localhost:8008/DocumentExplorerService");  ChannelFactory factory =   new ChannelFactory(binding,address);  m_service = factory.CreateChannel();  ……  IAsyncResult result = m_service.BeginTransferDocument(doc,null,null);  result.AsyncWaitHandle.WaitOne();  Stream stream = m_service.EndTransferDocument(result);

到此,相信大家对“怎么对WCF异步调用进行服务操作”有了更深的了解,不妨来实际操作一番吧!这里是蜗牛博客网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram