asp.net中WCF 客户端关闭带来的性能分析

这里的WCF异步调用是指单向非可靠异步调用,也就是你不知道调用是否成功,适用于性能高于可靠性的场合。

之前发布过一篇随笔WCF异步调用实战:OneWay+Asynchronous Operation,通过WCF服务端“单向(One-way)消息交换”+WCF客户端“异步信道调用(Asynchronous Operation)”实现快速的WCF异步调用。

但是,使用了一段时间,发现还是有些慢。今天实测了一下,调用代码如下:

 代码如下 复制代码
var client = new ExternalService.FeedWcf.FeedServiceClient();
client.CreateAsync(...);
try { client.Close(); }
catch { client.Abort();
}

实测下来,上面的调用耗时100~300毫秒左右。慢!

当时有点想不明白,都已经异步了,怎么还会慢?

于是改为更直接的异步调用 —— Task.Factory.StartNew(),代码如下:

 代码如下 复制代码
Task.Factory.StartNew(() =>
{    var client = new ExternalService.FeedWcf.FeedServiceClient();
    client.CreateAsync(...);
    try { client.Close(); }
   catch { client.Abort(); }
}
);

实测下来,调用耗时0~5毫秒,这才是异步的效果。

WCF客户端的异步怎么了?查看WCF客户端代理类的代码,异步调用部分也没问题。

...

后来,恍然大悟,原来问题不在异步调用(client.CreateAsync),而是在WCF客户端的关闭(client.Close)。

于是,专门针对client.Close()进行测试,发现时间全耗在这里(100~300毫秒)!

目前还没找到“如何在异步调用时关闭WCF Client”的解决方法,先用Task.Factory.StartNew()凑合着,让WCF客户端在另外一个线程中慢慢关闭

时间: 2024-12-28 15:40:12

asp.net中WCF 客户端关闭带来的性能分析的相关文章

asp.net中“从客户端中检测到有潜在危险的Request.Form值”错误的解决办法_实用技巧

在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止XSS攻击,asp.net的请求验证是默认启动的. 这里给出不同版本.net的解决方法. asp.net 2.0 通常解决办法 方案一: 将.aspx文件中的page项添加ValidateRequest="false" ,如下: <%@ Page ValidateRequest=&qu

asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误

在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止XSS攻击,asp.net的请求验证是默认启动的.这个给出各个版本.net的解决方法. asp.net 2.0 通常解决办法 方案一: 将.aspx文件中的page项添加ValidateRequest="false" ,如下: <%@ Page ValidateRequest=&quo

在ASP/ASP.NET 中处理客户端数字证书

asp.net|客户端    客户端数字证书与基本身份验证(Basic).域服务器的摘要式身份验证.集成 Windows 身份认证或自定义的 Form 认证等方式相比,虽然部署和管理方面稍微复杂一些,但安全性也更好一些,应用上也较为灵活.  在 ASP 和 ASP.NET 中处理和识别客户端数字证书是非常容易的,代码如下: ASP (VBscript)语法:     Dim subject   subject=Request.ServerVariables("CERT_SUBJECT"

在ASP及ASP.NET中处理客户端数字证书

客户端数字证书与基本身份验证(Basic).域服务器的摘要式身份验证.集成 Windows 身份认证或自定义的 Form 认证等方式相比,虽然部署和管理方面稍微复杂一些,但安全性也更好一些,应用上也较为灵活. 在 ASP 和 ASP.NET 中处理和识别客户端数字证书是非常容易的,代码如下: ASP (VBscript)语法: Dim subject   subject=Request.ServerVariables("CERT_SUBJECT") 或   subject=Reques

ASP.net中获取客户端参数操作系统信息

 这篇文章主要介绍了ASP.net中如何获取客户端参数或操作系统信息,需要的朋友可以参考下  代码如下: /// <summary>  /// 获取用户操作系统信息  /// </summary>  /// <returns></returns>  public string GetUserOS()  {  string strSysVersion = "其他";  HttpRequest Request = HttpContext.Cu

[转贴]ASP.NET中常用的26个优化性能方

1. 数据库访问性能优化 数据库的连接和关闭    访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响.系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求.连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能.因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用

TO:张日,在ASP文件中让客户端下载文本文件!

客户端|下载 在服务器向浏览器发送数据时,会先发送HTTP 协议中的Header数据要让客户端下载一个文本文件而不是显示在浏览器里就要改变Header数据,如下例: <%@ Language=VBScript %><%fn="thefilenametosave" Response.AddHeader "Content-Disposition: ","attachment;filename="&fn  %><!

关于在asp.net中嵌入javascript关闭窗口命令的问题

问题描述 我一个弹出窗口中的关闭按钮执行的代码事件为:Response.Write("<script>opener.location.href=opener.location.href;close();</script>");为何在我这边开发环境下很好用,可移植到用户哪儿,这关闭按钮失灵了,窗口就是关不了,不知何故!!请高手帮忙! 解决方案 解决方案二:Response.Write("<script>alert('不存在的页面');wind

ASP.NET中注册客户端脚本的三种方式

1. RegisterClientScriptBlock   把Javascript函数放在页面顶部 代码如下: protected void Page_Load(object sender, EventArgs e){  string myScript = @"function AlertHello() {                       var oText = document.getElementById('TextBox1');                      al