C# Sitefinity使用自定义发货方法进行自定义签出

C# Sitefinity使用自定义发货方法进行自定义签出,c#,telerik,e-commerce,sitefinity,C#,Telerik,E Commerce,Sitefinity,我有一个自定义的签出方法。我也有一个自定义的运输方式 我已撕下所有自定义代码,直接复制并粘贴Sitefinity文档中的自定义装运方法文件: 及 遵循此文档,我能够在我的电子商务后端创建一个新的配送方式,并选择我的定制配送方式 我有以下代码将我的结帐状态发货方法id设置为我的自定义发货方法id。我的购物车订单也是如此: CheckoutState checkoutState = new CheckoutState() { ... ShippingMethodId = ship

我有一个自定义的签出方法。我也有一个自定义的运输方式

我已撕下所有自定义代码,直接复制并粘贴Sitefinity文档中的自定义装运方法文件:

遵循此文档,我能够在我的电子商务后端创建一个新的配送方式,并选择我的定制配送方式

我有以下代码将我的结帐状态发货方法id设置为我的自定义发货方法id。我的购物车订单也是如此:

CheckoutState checkoutState = new CheckoutState()
{
    ...
    ShippingMethodId = shippingManager.GetShippingMethods().FirstOrDefault(s => s.Name == "custom-shipping").Id,
    ShippingMethodName = shippingManager.GetShippingMethods().FirstOrDefault(s => s.Name == "custom-shipping").Name,
    ...
}

工作得很好,很漂亮。获取装运方法。此装运方法包含我在遵循文档时定义的自定义装运承运人ID。承运人有2个运输服务设置我添加。我还可以使用以下工具查询它们:

var shippingCarrierInfo = shippingManager.GetShippingCarrierSetting("custom-shipping");
List<ShippingServiceSettings> services = shippingManager.GetShippingServiceSettings().Where(
                                                x => x.ShippingCarrierName == shippingCarrierInfo.Name &&
                                                x.IsActive == true).ToList();
var shippingcarrienfo=shippingManager.GetShippingCarrierSetting(“自定义装运”);
列表服务=shippingManager.GetShippingServiceSettings()。其中(
x=>x.ShippingCarrierName==shippingCarrierInfo.Name&&
x、 IsActive==true);
我没有得到空值或空值或任何东西。所有信息如预期

我可以通过以下操作从我的服务中获得发货回复:

List<IShippingResponse> shippingResponses = processShipping.GetApplicableShippingMethods(checkoutState, cartOrder).ToList();
List shippingResponses=processShipping.getApplicatableShippingMethods(checkoutState,cartOrder.ToList();
这会抛出一条可爱的通用错误消息:

空引用异常 {“对象引用未设置为对象的实例。”}

当然我不能看他们说的是空的。但我得到了它出错的方法的堆栈跟踪

跟踪:

at Telerik.Sitefinity.Modules.Ecommerce.Shipping.ShippingManager.GetShippingCarrierProvider(Guid shippingMethodId)
at Telerik.Sitefinity.Modules.Ecommerce.Shipping.Business.OnlineShippingMethodRetriever.GetApplicableShippingMethods(CheckoutState checkoutState, CartOrder cartOrder)
at Telerik.Sitefinity.Modules.Ecommerce.BusinessServices.Shipping.Implementations.EcommerceShippingMethodService.GetApplicableShippingMethods(CheckoutState checkoutState, CartOrder cartOrder)
at SitefinityWebApp.Mvc.Controllers.CheckoutController.RunCheckout(CheckoutForm CheckoutForm, User user, SitefinityProfile profile, CartOrder cartOrder, String paymentMethod) in c:\clients\badder ruter\RiverValleyDairySF\RiverValleyDairy\Mvc\Controllers\CheckoutController.cs:line 600
at SitefinityWebApp.Mvc.Controllers.CheckoutController.ProcessPayment(CheckoutForm CheckoutForm) in c:\clients\badder ruter\RiverValleyDairySF\RiverValleyDairy\Mvc\Controllers\CheckoutController.cs:line 210
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
位于Telerik.Sitefinity.Modules.Ecommerce.Shipping.ShippingManager.GetShippingCarrierProvider(Guid shippingMethodId)
在Telerik.Sitefinity.Modules.Ecommerce.Shipping.Business.OnlineShippingMethodRetriever.GetApplicatableShippingMethods(CheckoutState CheckoutState,CartOrder CartOrder)
在Telerik.Sitefinity.Modules.Ecommerce.BusinessServices.Shipping.implements.EcommerceShippingMethodService.getApplicatableShippingMethods(CheckoutState CheckoutState,CartOrder CartOrder)
在c:\clients\badder ruter\rivervalley dairysf\rivervalley dairy\Mvc\Controllers\CheckoutController.RunCheckout中的SitefinityWebApp.Mvc.Controllers.CheckoutController.RunCheckout(CheckoutForm CheckoutForm,用户,SitefinityProfile配置文件,CartOrder CartOrder,String paymentMethod)中
在SitefinityWebApp.Mvc.Controllers.CheckoutController.ProcessPayment(CheckoutForm CheckoutForm)中的c:\clients\badder ruter\RiverValleyDairySF\RiverValleyDairy\Mvc\Controllers\CheckoutController.cs:第210行
在lambda_方法中(闭包、控制器基、对象[])
位于System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object[]参数)
位于System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary`2参数)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor,IDictionary`2参数)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41()中
在System.Web.Mvc.Async.AsyncResultRapper.c_uuu显示类8`1.b_uuu7(IAsyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_uuDisplayClass37.c_uuDisplayClass39.b_u33()中
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49()中

我不知道我需要做什么。这已经是一个来回与支持票结束约3.5周了。愤怒的客户和我所需要的一切,来找出一个方法让这起作用。就像我说的,直接复制和粘贴文档。有人对此有经验吗?

也许你应该尝试让你的配送方式“离线”。否则,Sitefinity将尝试调用一些Web服务(不确定确切的工作流),根据您可能设置的重量/其他装运规则确定哪些方法适用于当前订单。据我所知-在线配送方法是一种将根据web服务进行检查的方法,而离线配送方法是一种将根据您在电子商务管理中添加的规则在Sitefinity中进行评估的方法。请转到Sitefinity管理,电子商务=>配送方法。找到您的配送方式,然后单击操作=>编辑属性。查找“装运方法类型”,并确保选择“自定义(脱机)”而不是“标准”(装运承运人)。当然,您也应该检查“此方法处于活动状态”,但我想您已经这样做了。此外,您可能希望在“发货价格”部分定义一些规则,以便根据您指定的规则和订单找到您的发货方法。不幸的是,脱机发货方法不是我想要的。我正在使用一个外部服务来计算运费,这就是为什么我需要使用自己的定制方法。
at Telerik.Sitefinity.Modules.Ecommerce.Shipping.ShippingManager.GetShippingCarrierProvider(Guid shippingMethodId)
at Telerik.Sitefinity.Modules.Ecommerce.Shipping.Business.OnlineShippingMethodRetriever.GetApplicableShippingMethods(CheckoutState checkoutState, CartOrder cartOrder)
at Telerik.Sitefinity.Modules.Ecommerce.BusinessServices.Shipping.Implementations.EcommerceShippingMethodService.GetApplicableShippingMethods(CheckoutState checkoutState, CartOrder cartOrder)
at SitefinityWebApp.Mvc.Controllers.CheckoutController.RunCheckout(CheckoutForm CheckoutForm, User user, SitefinityProfile profile, CartOrder cartOrder, String paymentMethod) in c:\clients\badder ruter\RiverValleyDairySF\RiverValleyDairy\Mvc\Controllers\CheckoutController.cs:line 600
at SitefinityWebApp.Mvc.Controllers.CheckoutController.ProcessPayment(CheckoutForm CheckoutForm) in c:\clients\badder ruter\RiverValleyDairySF\RiverValleyDairy\Mvc\Controllers\CheckoutController.cs:line 210
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()