anyone?
On Jun 10, 11:06 am, Jan Limpens <[email protected]> wrote:
> Hello,
>
> I was having difficulties with that Facility, so before I dive into
> what could be possibly wrong, I would like to share my code and hope
> somebody spots an error right on, to save me some time debugging...
>
> The trouble is, that if an exception (maybe a specific exception, but
> I am not sure) is thrown withing the transaction, the transaction
> stays open with a lock on the tables and it takes until sql server
> recycles for these tables become responsible again.
>
> The action method is pretty long, so I'll try to reduce it here and
> put the original code @http://pastebin.com/m3144a7e4.
>
> [Transactional]
> [Filter(ExecuteWhen.BeforeAction, typeof(AuthenticationFilter))]
> [Filter(ExecuteWhen.BeforeAction, typeof(RequiresFullCartFilter))]
> [SecureChannelFilter(true)]
> public class CheckOutController : BaseController
> {
> [AccessibleThrough(Verb.Post)]
> [Transaction(TransactionMode.Requires)]
> [return: JSONReturnBinder]
> public virtual PlaceOrderViewData PlaceOrder(
> [DataBind("viewData.TempOrder")] Order tempOrder,
> string selectedFreightOption,
> [DataBind("viewData.Card")] CreditCardDTO
> creditCardDTO,
> [DataBind("viewData.Address")] AddressDTO addressDTO,
> string bankPaymentOption,
> string billingAddress,
> string selectedPaymentOption,
> Boolean useFreightAsBillingAddress)
> {
> // work, work, work
> // I do a million things to construct an correct order out of the
> given params. all this works, so I cut it out here
> // but then I try to send an email....
> try // in a try!
> {
> // XXXXXXX
> sendOrderConfirmationMail(candidateOrder);
> // some config error (an iis smtp pickup path that did not exist on
> the server) caused this to fail
> // iis continued responsive
> // but all the tables that were opened in the transaction are locked
> now because the transaction is never committed
> // XXXXXXX
> }
> catch (Exception ex)
> {
> // I have this nowhere in my logs, so my guess is, the http request
> stops here and is killed after a period of time,
> // at the browser level I never received an answer. Only subsequent
> calls give me ado timeout exceptions.
> Logger.Warn("Could not send order
> confirmation mail.",
> ex.GetInnermostException());
> return new
> PlaceOrderViewData(ActionResult.Success,
> ExternalMessageFactory.Checkout.OkButCouldNotSendMail, url);
> }
>
> return new PlaceOrderViewData(ActionResult.Success,
> "", url);
> }
> }
>
> Now correcting that config also "fixed" the error, but I am still kind
> of spooked that this is possible at all. How can I be certain that
> some exception at a completely different place won't leave my
> transactions open, rendering the whole site useless?
>
> Please mind, I am not blaming any component or author in particular,
> everything might work as expected and I might be doing everything
> wrong. But help and hints would be thankfully accepted.
>
> -- Jan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---