对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异步调用进行服务操作
网站路径:http://bzwzjz.com/article/coheoph.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 营销型网站建设 手机网站设计 成都模版网站建设 成都商城网站建设 专业网站建设 攀枝花网站设计 企业网站建设公司 外贸网站设计方案 LED网站设计方案 成都网站制作 成都网站建设 成都定制网站建设 企业网站设计 重庆企业网站建设 高端网站设计 高端网站建设 网站设计公司 成都响应式网站建设 成都网站设计 网站制作报价 成都网站建设 成都网站制作