WCF异步服务正确创建方式详解

开发 开发工具
我们今天将会在这篇文章中通过一段简单的示例,为大家详细介绍一下有关WCF异步服务的具体实现方法,方便大家在学习应用过程中获得帮助。

WCF应用程序中,如何才能正确的实现WCF异步服务这一操作技巧呢?今天我们将会在这篇文章中为大家详细介绍一下有关这方面的具体应用方式,希望对于又需要的朋友们可以从中获得一些帮助。

本例子中,我们通过服务调用来读取服务端的文件,在实现文件读取操作的时候,采用异步文件读取方式。

先来看看服务契约的定义。服务契约通过接口IFileReader定义,基于文件名的文件读取操作以异步的方式定义在BeginRead和EndRead方法中。

  1. using System;   
  2. using System.ServiceModel;   
  3. namespace Artech.AsyncServices.Contracts   
  4. {   
  5. [ServiceContract(Namespace="http://www.artech.com/")]   
  6. public interface IFileReader   
  7. {   
  8. [OperationContract(AsyncPattern = true)]   
  9. IAsyncResult BeginRead(string fileName, AsyncCallback 
    userCallback, object stateObject);   
  10. string EndRead(IAsyncResult asynResult);   
  11. }   
  12. }  

FileReader实现了契约契约,在BeginRead方法中,根据文件名称创建FileStream对象,调用FileStream的BeginRead方法实现文件的异步读取,并直接返回该方法的执行结果:一个IAsyncResult对象。在EndRead方法中,调用FileStream的EndRead读取文件内容,并关闭FileStream对象。

  1. using System;   
  2. using System.Text;   
  3. using Artech.AsyncServices.Contracts;   
  4. using System.IO;   
  5. namespace Artech.AsyncServices.Services   
  6. {   
  7. public class FileReaderService : IFileReader   
  8. {   
  9. private const string baseLocation = @"E:\";   
  10. private FileStream _stream;   
  11. private byte[] _buffer;   
  12. #region IFileReader Members   
  13. public IAsyncResult BeginRead(string fileName, AsyncCallback 
    userCallback, object stateObject)   
  14. {   
  15. this._stream = new FileStream(baseLocation + fileName, 
    FileMode.Open, FileAccess.Read, FileShare.Read);   
  16. this._buffer = new byte[this._stream.Length];   
  17. return this._stream.BeginRead(this._buffer, 0, this._buffer.Length,
     userCallback, stateObject);   
  18. }   
  19. public string EndRead(IAsyncResult ar)   
  20. {   
  21. this._stream.EndRead(ar);   
  22. this._stream.Close();   
  23. return Encoding.ASCII.GetString(this._buffer);   
  24. }   
  25. #endregion 30: }   

采用传统的方式寄宿该服务,并发布元数据。在客户端通过添加服务引用的方式生成相关的服务代理代码和配置。你将会发现客户端生成的服务契约和服务代理类中,会有一个***的操作Read。也就是说,不管服务采用同步模式还是WCF异步服务实现,对客户端的服务调用方式没有任何影响,客户端可以任意选择相应的模式进行服务调用。

  1. namespace Clients.ServiceReferences   
  2. {   
  3. [ServiceContractAttribute(ConfigurationName
    "ServiceReferences.IFileReader")]   
  4. public interface IFileReader   
  5. {   
  6. [OperationContractAttribute(Action = 
    " http://www.artech.com/IFileReader/Read"
    ReplyAction = " http://www.artech.com/IFileReader/
    ReadResponse"
    )]   
  7. string Read(string fileName);   
  8. }   
  9. public partial class FileReaderClient :
     ClientBase
    <IFileReader>, IFileReader   
  10. {   
  11. public string Read(string fileName)   
  12. {   
  13. return base.Channel.Read(fileName);   
  14. }   
  15. }   

直接借助于生成的服务代理类FileReaderClient,服务调用的代码就显得很简单了。

  1. using System;   
  2. using Clients.ServiceReferences;   
  3. namespace Clients   
  4. {   
  5. class Program   
  6. {   
  7. static void Main(string[] args)   
  8. {   
  9. using (FileReaderClient proxy = new FileReaderClient())   
  10. {   
  11. Console.WriteLine(proxy.Read("test.txt"));   
  12. }   
  13. Console.Read();   
  14. }   
  15. }   

以上就是对WCF异步服务的实现做的详细介绍。

【编辑推荐】

  1. WCF异步操作具体定义与应用
  2. WCF自定义集合类型应用注意事项探讨
  3. WCF会话服务基本应用技巧分享
  4. WCF编码规范相关知识详解
  5. Silverlight调用WCF服务相关应用细节解析
责任编辑:曹凯 来源: CSDN
相关推荐

2010-03-01 17:44:39

Silverlight

2010-02-25 16:52:12

引用WCF服务

2010-03-01 16:59:31

WCF异常调试

2010-02-26 09:33:18

WCF创建WebSer

2010-03-02 09:32:54

WCF服务消息

2010-03-01 14:08:53

WCF编码器

2010-02-26 10:30:03

ASP.NET Aja

2010-02-26 14:05:57

WCF通信方式

2009-12-21 18:32:22

关闭WCF链接

2009-12-08 14:10:55

Silverlight

2010-03-01 14:01:50

WCF服务异步调用

2010-02-24 10:07:48

WCF跨越边界

2010-03-02 16:05:48

WCF端点配置

2010-02-26 17:44:51

WCF安全参数

2010-02-22 14:09:08

WCF Dispose

2009-12-21 10:09:26

WCF创建客户端服务对

2010-02-25 09:13:34

WCF异步调用

2010-02-22 14:18:34

WCF服务验证

2010-02-26 11:22:16

LitwareHR使用

2010-02-24 12:41:58

WCF异常处理
点赞
收藏

51CTO技术栈公众号