Будьте осторожны с этим ответом, так как я не совсем уверен, что он хороший.
Во-первых, я предполагаю, что вы не настроили что-то вроде управления сеансом sql, и единственное, что вы изменили, - это пользователь, под которым работает IIS.
Вы наблюдаете два явления:
- Сериализация объекта, который не должен быть сериализован
- Загрузка вашей сборки доменом приложения, который еще не загрузил ее.
Поскольку ваш домен приложения уже загрузил сборку, кажется безопасным предположить, что исключение выдается другим доменом приложения. Если он генерируется другим доменом приложения, возможно, это связано с тем, что этот домен приложения пытается десериализовать ваш пользовательский объект. (Он был сериализован до того, как это продемонстрирует другое исключение.)
OK. Теперь, даже если IIS работает под локальным пользователем, среда Role - нет. Эта служба устанавливается вместе с ОС Azure, вы не можете выбрать пользователя, под которым она работает (возможно, вы могли бы это сделать, но я бы не стал)
Мне кажется, что для получения информации из RoleEnvironnement среда выполнения Azure может использовать два пути кода:
- Один, если служба IIS и среда выполнения работают под одним и тем же пользователем, что не требует переключения домена приложения.
- другое, если служба IIS и среда выполнения не разделяют пользователя, под которым они работают. В этом случае среда выполнения требует этого, так как два пользователя не имеют одинаковых прав.
В заключение, я, конечно, не знаю, почему среда выполнения Azure хотела бы перемещать вашего пользователя между разными доменами приложений, но, вероятно, именно это и делает.