У меня возникли проблемы с работой Azure на сервере разработки. У меня есть приложение Silverlight, которое я хочу подключить к Azure, поэтому я предоставляю REST API из веб-роли.
Вот мой класс обслуживания:
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExpenseService
{
private ExpenseDataSource expenseData = new ExpenseDataSource();
[OperationContract]
[WebGet(UriTemplate="expenses", ResponseFormat=WebMessageFormat.Xml)]
public List<String> GetExpenses()
{
return expenseData.Select().ToList();
}
}
Инициализация типа ExpenseDataSource
не удалась:
public class ExpenseDataSource
{
private static CloudStorageAccount storageAccount;
private ExpenseTableContext context;
static ExpenseDataSource()
{
CloudStorageAccount.SetConfigurationSettingPublisher(
(configName, configSettingPublisher) =>
{
string connectionString = RoleEnvironment.GetConfigurationSettingValue(configName);
configSettingPublisher(connectionString);
}
);
storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
CloudTableClient.CreateTablesFromModel(typeof(ExpenseTableContext), storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials);
}
// ...
}
Ошибка:
SEHException было поймано
Внешний компонент вызвал ошибку исключения.
Я не уверен, что я делаю неправильно. Я пытаюсь следовать этому руководству. Автор описывает необходимость сделать что-то по-другому для сред, отличных от Azure, например для тестов NUnit. Нужно ли мне что-то делать для работы на сервере разработки? Должен ли я просто настроить это приложение для использования реального хранилища Azure, даже если оно работает на моей машине?
Обновление: если я закомментирую конструктор ExpenseDataSource
и просто использую поддельные данные, сервис будет работать нормально.
Обновление 2: @Maupertuis ответил, что я не могу настроить учетную запись хранения из статического инициализатора. Однако это взято непосредственно из примера кода MS Windows Azure:
public class GuestBookEntryDataSource
{
private static CloudStorageAccount storageAccount;
private GuestBookDataContext context;
static GuestBookEntryDataSource()
{
storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
CloudTableClient.CreateTablesFromModel(
typeof(GuestBookDataContext),
storageAccount.TableEndpoint.AbsoluteUri,
storageAccount.Credentials);
}
// ...
}
Может ли это когда-нибудь сработать?
SetConfigurationSettingPublisher
вOnStart()
, но он так и не был вызван. Я поставил там точку останова, которая не сработала. Я думал, чтоOnStart()
всегда бегал? 09.10.2010