You've a problem with your architecture somewhere. My initial thought is that the database access code being called inside
InvoiceMgr.Post
doesn't belong in a helper in the business logic - if it adds stuff to the database it would be better in a separate data access layer .
You can then hide the DAL behind the service or access directly.
As for the WCF service itself, unless you have other reasons for a service you can do other things to help the situation that might make more sense - effectively you are spinning the database call off to a thread that this code doesn't care about. One option is to queue the invoice for posting, and let the queue processing code handle the DB call (options include
RabbitMQ[
^]or MSMQ). Note that you need to deal with fault tolerance, but you have that problem with WCF too.
The other thing you could consider is batch processing - if it is establishing the connection to the foreign database which takes the time - batch up Chinese invoices so several updates are done at once, depending on the nature of the business this might not be possible.