首页 新闻 搜索 专区 学院

wcf服务端的异步怎么弄????走过路过进来看下!

0
悬赏园豆:20 [已解决问题] 解决于 2012-08-07 13:19

Service:

    public class Service:IContracts
    {
        private const string baseLocation = @"E:\";
        private FileStream _stream;
        private byte[] _buffer;
        public double Add(double x, double y)
        {
            return x + y;
        }
 
        public IAsyncResult BeginAsy(string fileName, AsyncCallback userCallback, object stateObject)
        {
             this._stream = new FileStream(baseLocation + fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
             this._buffer = new byte[this._stream.Length];
             return this._stream.BeginRead(this._buffer, 0, this._buffer.Length, userCallback, stateObject);
        }

        public string EndAsy(IAsyncResult ar)
        {
            this._stream.EndRead(ar);
            this._stream.Close();
            Thread.Sleep(3000);
            return Encoding.ASCII.GetString(this._buffer);
         }


    }

client:

proxy.BeginAsy("test.txt", asy =>   //test.txt是大文件 【1】
            {
                Console.WriteLine(proxy.EndAsy(asy));
            }, null);
 Console.WriteLine(proxy.Add(1.0, 1.0));【2】

接口IService 和宿主的代码绝对正确!就不贴了

【1】中异步调用服务端的方法读取一个大文件,【2】会在【1】后立即执行,但是为什么【2】中调用服务端的那个方法是在【1】调用的方法执行完整返回后才可以执行的呢?服务端不是已经用了异步了吗?如果不是这样用,那wcf服务端的异步是怎么用的?

koi的主页 koi | 初学一级 | 园豆:2
提问于:2012-08-03 17:08
< >
分享
最佳答案
0

如果你能肯定 Add 是在 EndAsy 执行完成后才执行,那么你可以看一下你的服务行为的下列属性值:

UseSynchronizationContext

InstanceContextMode

ConcurrencyMode。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2012-08-06 09:16

帮我看看这个问题吧http://q.cnblogs.com/q/39726/

koi | 园豆:2 (初学一级) | 2012-08-07 15:33
其他回答(2)
0

可以参考一下 

http://www.cnblogs.com/artech/archive/2007/03/02/661969.html

http://www.cnblogs.com/artech/archive/2008/08/21/1273021.html

johden2 | 园豆:352 (菜鸟二级) | 2012-08-03 17:21

网页用不了双工  这个好像没什么用

支持(0) 反对(0) koi | 园豆:2 (初学一级) | 2012-08-03 17:26
-1

你这个 应该 不是 异步调用

無限遐想 | 园豆:3740 (老鸟四级) | 2012-08-03 17:30

那服务端的异步调用是怎么样的。。  我用的服务端代码就是   Artech 演示 的 异步服务端例子,不明白了。。http://www.cnblogs.com/artech/archive/2009/07/08/1519499.html

支持(1) 反对(0) koi | 园豆:2 (初学一级) | 2012-08-03 17:33

@koi: 最简单的 。就是 你在客户端 生成 异步调用 代理类。你 仔细 看看 他的 代码。抄 也要 仔细点哦。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-08-03 18:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册