У меня нет реального опыта работы с PHP, но я сделал много фоновых веб-сервисов Python, используемых интерфейсными клиентами на разных языках и в разных средах. SOAP - единственная технология, из тех, что я пробовал, в большинстве случаев оставляющая у меня кислый вкус - слишком много «церемоний» / накладных расходов. (В далеком прошлом я также пробовал Corba, и, как только я пытался взаимодействовать между независимыми реализациями для разных языков, ощущение не было таким уж разным; -).
XML-RPC, JSON и протокольные буферы оказались для меня вполне пригодными.
Протоколные буферы - это то, что мы обычно используем в Google, и я не уверен, что вы найдете их недостаточно документированными - пожалуйста, задавайте конкретные вопросы, и я посмотрю, что я могу сделать, чтобы официально улучшить нашу документацию или неофициально! Их главное преимущество заключается в том, что они настолько «туго» на проводе - минимальные накладные расходы при максимальной гибкости. JSON тоже хорош - и не только для простоты использования в клиентах Javascript, либо: иногда я использовал его в качестве формата по умолчанию для общения между различными языками, даже когда JS вообще не был задействован!
Как только ваше веб-приложение настроено на отправку (скажем) буфера протокола, совсем нетрудно сделать его способным отправлять XML или JSON по запросу - один дополнительный параметр? Outputformat = JSON в запросе GET это все, что нужно, и выбор правильного выходного сериализатора тривиально прост (в Python, но, я уверен, и в PHP).
«Получение строго типизированных объектов» на вашем конце C # - это, на мой взгляд, работа, которую лучше всего выполнять в слое C # на вашем конце. Никакого прямого опыта с этим нет, но, например, у меня есть завернутый прием буферов протокола в C ++ в фабричные классы, которые выбрасывают идеально сформированные и статически типизированные объекты (или выдают исключения, когда входящие данные не были семантически правильными ); Я знаю, что не будет сложнее для JSON или XML, и я очень сомневаюсь, что будет сложнее для Java, C #, Python, если вы заботитесь, или любого другого языка, который вообще пригодится в реальном мире! -)