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

开发 后端
对客户端究竟应该如何执行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);  
  10. }  

注意,在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); 
责任编辑:chenqingxiang 来源: 电子工业出版社
相关推荐

2009-12-21 14:10:26

WCF异步调用

2009-11-09 10:50:30

WCF异步调用

2010-03-01 14:01:50

WCF服务异步调用

2009-11-06 15:54:15

WCF异步调用

2010-02-22 13:28:05

WCF异步调用

2009-12-07 14:26:47

WCF异步调用

2009-11-09 15:49:01

WCF异步调用

2010-02-25 09:13:34

WCF异步调用

2009-12-22 18:43:00

WCF异步调用

2009-12-08 18:08:43

WCF服务

2009-10-20 16:48:30

C#委托

2009-07-01 13:58:00

JavaScript异

2010-03-01 11:10:41

WCF绑定元素

2009-07-01 14:31:01

JavaScript异

2012-04-20 10:05:16

WCF

2009-07-01 14:23:46

JavaScript异

2009-07-01 14:05:23

JavaScript异

2009-08-21 11:24:16

C#异步调用

2009-07-01 14:37:14

JavaScript异

2010-04-23 13:29:01

Oracle存储过程
点赞
收藏

51CTO技术栈公众号