使用Visual Studio 2012,C#.net 4.5,SQL Server 2008,Feefo,Nopcommerce
大家好,我最近在我们现有的网站中实施了一项新的评论服务。
当更改生效后的第一天,一切都很好。
从那以后,尽管向Feefo的销售发送一直没有进行,但是没有任何错误记录。
在Nop Commerce服务的OrderProcessingService.cs中,当确认订单已完成时,我将调用HttpWebrequest。这是代码。
var email = HttpUtility.UrlEncode(order.Customer.Email.ToString());
var name = HttpUtility.UrlEncode(order.Customer.GetFullName().ToString());
var description = HttpUtility.UrlEncode(productVariant.ProductVariant.Product.MetaDescription != null ? productVariant.ProductVariant.Product.MetaDescription.ToString() : "product");
var orderRef = HttpUtility.UrlEncode(order.Id.ToString());
var productLink = HttpUtility.UrlEncode(string.Format("myurl/p/{0}/{1}", productVariant.ProductVariant.ProductId, productVariant.ProductVariant.Name.Replace(" ", "-")));
string itemRef = "";
try
{
itemRef = HttpUtility.UrlEncode(productVariant.ProductVariant.ProductId.ToString());
}
catch
{
itemRef = "0";
}
var url = string.Format("feefo Url",
login, password,email,name,description,orderRef,productLink,itemRef);
var request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.Timeout = 5000;
request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusDescription == "OK")
{
var stream = response.GetResponseStream();
if(stream != null)
{
using (var reader = new StreamReader(stream))
{
var content = reader.ReadToEnd();
}
}
}
}
因此,如您所见,它是一个简单的Web请求,可在订单上进行处理,所有产品变体均发送到Feefo。
现在:
var内容中的流和阅读器用于调试。
我想知道代码对您是否有任何可能与网站流程有关的标志?另请注意,我已经运行了一些SQL语句以查看是否存在任何死锁或较大的升级,到目前为止看来还不错,日志也只是正常的Bot日志记录而已。
任何帮助将非常感激!
编辑:还请注意此代码是在一个方法中被调用并包装在一个try catch中
更新:好了,别忘了“不发送”,那是因为我刚刚被告知我的代码上周回滚了
在处理订单时调用另一个网站可能会降低性能,因为您正在调用不受控制的网站。您不知道需要多少时间。此外,GetResponse方法可能会引发异常,如果您没有在外部try / catch块中记录任何内容,那么您将无法知道正在发生什么。
执行此类任务的最佳方法是实现诸如“发送电子邮件”计划任务之类的内容,并在您有能力等待远程服务时发送数据。如果尝试,这很容易。如果升级nopCommerce代码库,则它更具弹性,并且更易于维护。
这是我做类似事情的方式:
避免修改OrderProcessingService:创建自定义的服务或插件,消耗OrderPlacedEvent
或OrderPaidEvent
(只需实现IConsumer<OrderPaidEvent>
或IConsumer<OrderPlacedEvent>
接口)。
如果您此时不需要响应,请不要在处理请求时直接致电第三方服务。这只会延迟您的过程。在步骤1中创建的服务中,存储数据,然后将其发送给Feefo。如果您不介意在重新启动站点时丢失挂起的数据,则可以将数据存储到数据库或使用静态集合(例如,对于统计数据来说可以)。
实施第2点的最佳方法是添加一个新的计划任务实施ITask
(请记住要在ScheduleTask表中添加一条记录)。只需恢复存储的数据即可进行处理。
添加一些日志记录。很简单,只需获取一个ILogger
实例并调用即可Insert
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句