Did you try the outside nat?
The real problem is that the nat as configured for internal hosts is source-nat where the destination host receives packets sourced as your outside IP address.
But, the static nat for inbound is a destination nat where the source does not get changed. Your internal server may see the packets come in targeting the public ip, but the response will be to the source which is the private IP of the host PC, and that is "local" to the server and the server responds to the source, but the source is expecting a reply from the public ip and just drops it.
You end up needing to do both source and destination nat which is what having both a nat inside and a nat outisde configuration is trying to do, but the issue is that no packet ever actually traverses the 'outside' interface since both the source and destination are on the same interface and are local to each other.
There is a concept called 'nat on a stick' uisng a loopback interface as the nat interface and a routing trick to try to set the loopback into the route table.
This example uses a different physical router. I have never seen this work, and it is not supported by Cisco TAC.
http://cco.cisco.com/en/US/tech/tk648/tk361/technologies_tech_note09186a0080094430.shtml