Given that the code can cope with service being null, but we throw here, that code won't be used.  Why are we not just setting service=null here and not rethrowing?  This would allow openBytes to use the service if available, and fall back if not.