This results in our ServiceNames (an internal detail) becoming a form of end-user API. I don't think we want to have that kind of contract.

Why can't the relevant bindings use less generic, type-specific names?