You are calling submit_transaction() to start the transaction. You should call the System.Session.start_transaction() method to begin the transaction and System.Session.submit_transaction() to commit it. If you don't call start_transaction(), there is no transaction context setup and each call is autonomous. If you want to cancel, you can call the System.Session.rollback_transaction() or let the timeout expire without calling submit_transaction().
One question, What is the purpose of setting the "urn:iControl" headers? I believe the session id needs to be passed in with the "X-iControl-Session" HTTP or SOAP header if you want to use a unique session key for the current transaction.
Hope this helps...
-Joe