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

希望我对WCF异步调用的一点经验能给大家带来帮助,导致WCF异步的原因也许还有很多,不过在你遇到错误时,可以先检查一下你程序中的字符串,暂时把他们置为””,试试看。没准就是他引起的问题啊。

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

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

 
 
  1. [ServiceContract]
  2. public interface IDocumentsExplorerService
  3. {
  4. [OperationContract]
  5. Stream TransferDocument(Document document);
  6. [OperationContract(AsyncPattern = true)]
  7. IAsyncResult BeginTransferDocument(Document document,
  8. AsyncCallback callback, object asyncState);
  9. Stream EndTransferDocument(IAsyncResult result);

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

WCF异步调用方式如下:

 
 
  1. BasicHttpBinding binding = new BasicHttpBinding();
  2. binding.SendTimeout = TimeSpan.FromMinutes(10);
  3. binding.TransferMode = TransferMode.Streamed;
  4. binding.MaxReceivedMessageSize = 9223372036854775807;
  5. EndpointAddress address = new EndpointAddress
  6. ("http://localhost:8008/DocumentExplorerService");
  7. ChannelFactory factory = 
  8. new ChannelFactory(binding,address);
  9. m_service = factory.CreateChannel();
  10. ……
  11. IAsyncResult result = m_service.BeginTransferDocument(doc,null,null);
  12. result.AsyncWaitHandle.WaitOne();
  13. Stream stream = m_service.EndTransferDocument(result);

分享题目:对WCF异步调用进行服务操作
URL地址:http://www.csdahua.cn/qtweb/news9/333209.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网