[DataContract]
public class SalesRepReturn : BaseReturn
{
[DataMember]
public IEnumerable<LeadInfo> TodayAppointments { get; set; }
[DataMember]
public IEnumerable<LeadInfo> TodayKnock { get; set; }
[DataMember]
public IEnumerable<LeadInfo> OutstandingLeads { get; set; }
[DataMember]
public IEnumerable<LeadInfo> HotLeads { get; set; }
[DataMember]
public IEnumerable<LeadInfo> AssociatedLeads { get; set; }
}
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/SalesRepData",
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
SalesRepReturn SalesRepData(int salesRepId, float lat, float lon, int distance);
public SalesRepReturn SalesRepData(int salesRepId,float lat,float lon,int distance)
{
Stopwatch stopwatch = Stopwatch.StartNew();
Stopwatch stopwatch1 = Stopwatch.StartNew();
var salesRepReturn = new SalesRepReturn { ReturnMsg = "Enter valid representative Id", ReturnCode = 401 };
if (salesRepId == 0) return salesRepReturn;
salesRepReturn.AssociatedLeads = MapLeads(salesRepId,lat,lon,distance);
stopwatch.Stop();
LogTimeTaken(DateTime.Now.ToString() + " Time Taken for Map Leads SRD " + stopwatch.ElapsedMilliseconds.ToString());
salesRepReturn.ReturnCode = 200;
salesRepReturn.ReturnMsg = Messages.Success;
stopwatch1.Stop();
LogTimeTaken(DateTime.Now.ToString() + " Entire Method SRD " + stopwatch1.ElapsedMilliseconds.ToString());
return salesRepReturn;
}
private IEnumerable<LeadInfo> MapLeads(int salesRepId,float lat,float lon,int distance)
{
var result=_context.Database.SqlQuery<LeadInfo>("GetMappedLeadsByLatLong @salesRepId,@latitude,@longitude,@distance", new SqlParameter("salesRepId", salesRepId), new SqlParameter("latitude", lat), new SqlParameter("longitude", lon), new SqlParameter("distance", distance));
return result;
}
以上是我的WCF服务代码。您可以看到我添加了时间戳以获得处理时间。处理时间甚至不需要一秒钟,但在邮递员的响应时间在2秒到15秒之间变化。我不知道原因是什么。我希望该方法不到1秒或2秒。答案的平均大小为40KB。
答案 0 :(得分:1)
这是因为当你停止时间时你的SqlQuery还没有被执行。它是在您的DataContract序列化过程中执行的。
将return result;
方法中的MapLeads
更改为
return result.ToList();
并且秒表处理时间应该更接近实际响应时间。
您可以在MSDN上找到有关Enitity Framework SQL查询的延迟执行的更多信息: https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx
答案 1 :(得分:1)
来自我的同事的某些意见。希望这可以帮助任何未来的读者
原因为什么有时会更快?
根据数据的数量,您可以与之抗衡。不确定Postman如何存储收到的数据,但是如果有任何相关的内部对象/ dom会花费一些时间。 对于可能是查询/参数缓存的4/3秒响应。
更多解释为何延迟
最重要的是,互联网速度将起到至关重要的作用。
<强>解决方案:强> 最后,它是后端数据库服务器的带宽。带宽速度的增加将响应时间减少到大多数响应的5秒以下,响应时间为10秒,大小为1.25MB。
但这不是解决方案,我的前端(IIS)端和后端(DB服务器)使用公共IP进行通信。我们与我们的服务器提供商进行了交谈,以便使用私有IP实现这一目标,并为我们解决了这个问题。