Wcf 如何计算网络速度:或;goodput“;带宽,还是真正的带宽?

Wcf 如何计算网络速度:或;goodput“;带宽,还是真正的带宽?,wcf,network-programming,azure,client-server,latency,Wcf,Network Programming,Azure,Client Server,Latency,我试图确定多层系统中服务器和各种客户端之间的延迟和带宽。我相信最容易得到的是“goodput”或有效的应用层速率,但延迟有点难以得到,但更难得到的是真正的带宽,包括“窗口大小”和其他技术因素 我想从客户机或服务器的角度来描述如何最准确地计算这一点。。。只要我能够在Azure上运行服务器 我愿意(但不限于)使用IIS传输一系列字节,这是一种基于TCP的WCF服务,但解决方案需要基于.NET 更新 我在这个问题上加了一个悬赏,因为有这么多的信息。。。然而,很多方面似乎相互冲突,或者缺少数据,特别是在

我试图确定多层系统中服务器和各种客户端之间的延迟和带宽。我相信最容易得到的是“goodput”或有效的应用层速率,但延迟有点难以得到,但更难得到的是真正的带宽,包括“窗口大小”和其他技术因素

我想从客户机或服务器的角度来描述如何最准确地计算这一点。。。只要我能够在Azure上运行服务器

我愿意(但不限于)使用IIS传输一系列字节,这是一种基于TCP的WCF服务,但解决方案需要基于.NET

更新

我在这个问题上加了一个悬赏,因为有这么多的信息。。。然而,很多方面似乎相互冲突,或者缺少数据,特别是在.NET实现中。我最感兴趣的是有两个C#或Silverlight实现


一些网络专家说,我需要考虑TCP窗口大小的“缓慢启动”

您是否尝试过WCF跟踪和消息日志记录?如果在服务和客户端上启用跟踪电子邮件日志记录,则可以打开所有日志并检查所有端到端信息

我讨厌看到一笔好的赏金白白浪费掉,所以我会尝试用我掌握的信息回答我自己的问题

[延迟]

使用Silverlight测量实际(在线)延迟和速度是不可能的,因为我们无法访问TCP套接字,也无法从沙箱访问此类低级接口。也就是说,可以推断WCF延迟和Goodput带宽

WCF服务

2    using System;
3    using System.Net.NetworkInformation;
4    using System.Text;
5    
6    public class Service : IService
7    {
8        public bool PingNetwork()
9        {
10           return true;
11       }
12   }
以及客户端:

   using System;
   using System.Windows;
   using System.Windows.Controls;
   using PingDemo.PingServiceReference;

   namespace PingDemo
   {
       public partial class MainPage : UserControl
       {
           private ServiceClient client = new ServiceClient();
           private DateTime PingStart = new DateTime();


       public MainPage()
       {
           InitializeComponent();

           client.PingNetworkCompleted += new EventHandler(client_PingNetworkCompleted);
       }

       void client_PingNetworkCompleted(object sender, PingNetworkCompletedEventArgs e)
       {
           if (e.Error == null && e.Cancelled == false)
           {
               MessageBox.Show("Ping Status: " + e.Result);
           }
       }

       private void btnPing_Click(object sender, RoutedEventArgs e)
       {
           if (client == null)
           {
               client = new ServiceClient();
           }

           PingStart = DateTime.UtcNow();
           client.PingNetworkAsync(txtHostIP.Text.Trim());
           TimeSpan Est_RoundTripTime = DateTime - PingStart;  //may need to look up exact syntax

       }
   }
}

[上传下载]

通过使用WCF服务主机确定延迟的类似方式,可以通过将已知(不可压缩)数据集下载到客户端并返回来估计上载和下载速度

下面的博客讨论了通过WCF发送大数据的方法。这可用于使用与上述类似的方式计算发送/传输数据的速度


我一直在考虑一种技术,它可以在确定延迟方面产生令人满意的结果

如果客户机和服务器具有非常高精度的同步时钟(针对常见的低延迟源,即time.nist.gov),只需将服务器上的当前时间戳发送给客户机,客户机就可以将其本地时间与服务器的时间进行比较。时间戳的差异将产生延迟


这可以与大型“虚拟”文件传输结合使用,以确定持续传输期间和不同网络负载下的延迟。

我的服务器和一个客户端位于Azure中。我希望以编程方式从跟踪日志中获得结果,并使用它在运行时调整应用程序行为。基于此,我不确定如何在我的情况下实现这一点抱歉,我没有任何Azure经验,因此我的答案可能毫无意义。我想你应该用Azure标签来标记这个问题,因为它会对你问题的解决方案产生很大影响;另外,感谢您提供查看跟踪查看器的提示。我将+1,因为它的一般帮助,它再次回复到Azure中时根本不会改变跟踪。如果需要,您仍然可以在Windows Azure中启用WCF跟踪(首先是web.config中的配置设置问题,Windows Azure运行完整的IIS)并监视跟踪文件。