I had a demo on this scenario from earlier this year - I'll try to pull it up and share some code. But until then,let me try to provide an answer.
The reason for the difference between how the Phone.Storage libraries work and the Windows Azure SDK is related to the storage account credentials. With the Azure SDK, the credentials are known - in your .csfg file for example and trust, and thus the
SDK makes a REST API call to Windows Azure storage, providing your credentials, to get the SAS requested. We wouldn't want the storage account credentials on the phone. Therefore, with the Phone.Storage library a proxy service is needed to
make a request to a trusted source (e.g. web service running someplace else -like a web role or any other hosting provider). The proxy then initiates the SAS request to Windows Azure storage and returns the necessary information.
Given the need to request a SAS from Windows Azure storage, I don't think you'll ever get away from having to make at least one initial trip. It works that way with the Azure SDK too - it's just kind of hidden from you (think you would see that network
traffic if you watch for it via Fiddler).
As for why GetSharedAccessSignature throws an exception when using the Phone.Storage library, I would assume (not one to speak for the authors), that this was done to try to keep as much parity between the Phone.Storage library and the Azure SDK. This
may allow for the future option to change the function's implementation to not need the request to a proxy service.
Make sense? Help?