本篇内容主要讲解“怎么对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异步调用进行服务操作”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!