The canonical way would be to use message queues (MSMQ), found in the System.Messaging namespace. You can then set up a service on the same or another machine to read messages off the queue and process them.
If that’s uncomfortable then you can build your own “queue” in a database table. Then the service would have to poll periodically for entries or you could set up a scheduled batch job (console app or PowerShell) which would read the table on each activation.
^^^what he said. Really depends on what you have support for on the server, etc. Another free option would be RhinoQueues, good to have handy if you can’t get MSMQ installed. You also might want to look at some service busses like MassTransit or NServiceBus to handle the messaging.