WebServices是否在.NET上异步/同步?

 cherry 发布于 2023-02-13 10:44

我从客户端调用了30次WebService方法(asmx):

for (var i = 0; i < 30; i++) {
    WSCustom.Test(i,
        function (res) {
            $("#Results").append(res + "
"); }, function (res) { $("#Results").append(res.get_message() + "
"); } ); }

这是WebService方法:

[WebMethod(EnableSession = true)]
public string Test(int i)
{
    DateTime m_oStart = DateTime.Now;
    WebClient m_oClient = new WebClient();

    if (i % 2 == 0)
    {
        byte[] res = m_oClient.DownloadData("http://www.repubblica.it/");
    }

    return String.Format("TotalSeconds:{0}", new string[] { DateTime.Now.Subtract(m_oStart).TotalSeconds.ToString() });
}

我的方面是asynch回复.

我的意思是,我应该立即得到15个回复(奇怪的是i它立即返回),并且在剩余的回复期间(需要时间下载页面服务器端).

但事实上,outpup是不同的:它立即处理第一个电话.比,它等待第二个完成,比我收到一些奇怪的i回复,依此类推.

所以它根本不是异步的.

WebServices如何管理.NET中的客户端调用?我可以在整个过程中执行asynch吗?

编辑

有了EnableSession = false这样的结果:

TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:1,514
TotalSeconds:0
TotalSeconds:1,857
TotalSeconds:0
TotalSeconds:2,143
TotalSeconds:0
TotalSeconds:1,88
TotalSeconds:0
TotalSeconds:3,178
TotalSeconds:0
TotalSeconds:3,562
TotalSeconds:2,095
TotalSeconds:0
TotalSeconds:0
TotalSeconds:4,221
TotalSeconds:1,749
TotalSeconds:0
TotalSeconds:0
TotalSeconds:3,717
TotalSeconds:0
TotalSeconds:1,977
TotalSeconds:2,421
TotalSeconds:2,439
TotalSeconds:1,807
TotalSeconds:2,124

所以它不是会话错误.

1 个回答
  • 你有EnableSession=true网络方法.这实际上是队列调用,因为会话对象将为每个请求锁定.

    如果您不使用会话,则不应启用它.


    来自http://msdn.microsoft.com/en-us/library/aa478952.aspx:

    为了提供GetItemExclusive所需的排他性,会话状态提供程序必须实现一种锁定机制,以防止需要对会话状态进行读/写访问的两个或多个并发请求访问给定会话.该机制通过防止并发请求覆盖彼此的更改来确保会话状态的一致性.即使会话状态数据源是多个Web服务器共享的远程资源,锁定机制也必须工作.

    2023-02-13 10:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有