Я создал новый веб-приложение в ВизуальныйСтудия , который начинается с вопроса нового пользователя для регистрации нового аккаунта. Пользователь заполняет свои данные через форму Windows, а затем у меня есть Azure Cloud Service (включая веб-роль с веб-сервисом WCF), который потребляется и предназначен для обновления удаленного Azure Хранилище таблиц.Почему мое веб-приложение ASP.NET не добавляет нового пользователя в мое хранилище Azure Table?
Проблема у меня есть, когда пользователь отправляет форму код ответа HTTP (получен с помощью Скрипач Web Debugger) является 200 успех, но ничего не создается/добавляется в счет Azure Таблица хранения. Я не разработчик C# и веб-сервисы/Azure оба новы для меня так сильно, что мой код/конфигурация ошибочна.
RegisterUserService.svc.cs:
using System.ServiceModel;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using Microsoft.WindowsAzure;
using System;
using System.Diagnostics;
namespace WCFServiceWebRoleRegisterUser
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class RegisterUserService : IRegisterService
{
public void AddNewUser(UserEntity user)
{
try
{
// Retrieve the storage account from the connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting
("registerCloudService40083714"));
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Create the table if it doesn't exist.
CloudTable table = tableClient.GetTableReference("users");
table.CreateIfNotExists();
// Create a new user entity.
UserEntity newUserEntry = new UserEntity(user.Surname, user.Email);
newUserEntry.Forename = user.Forename;
newUserEntry.Password = user.Password;
// Create the TableOperation object that inserts the user entity.
TableOperation insertOperation = TableOperation.Insert(newUserEntry);
// Execute the insert operation.
table.Execute(insertOperation);
if (table.Execute(insertOperation).HttpStatusCode == 403 ||
table.Execute(insertOperation).HttpStatusCode == 409)
{
Debug.WriteLine("Account already registered with that Email Address");
}
else if (table.Execute(insertOperation) != null &&
table.Execute(insertOperation).HttpStatusCode == 200)
{
Debug.WriteLine("Account successfully registered");
}
}
catch (Exception)
{
throw;
}
}
}
}
Register.aspx.cs: (это код, который потребляет службу WCF Cloud)
using _40083714webapp.RegisterUserServiceReference;
using System;
using System.Web.UI;
namespace _40083714webapp
{
public partial class Home : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
}
protected void registerButton_Click(object sender, EventArgs e)
{
RegisterServiceClient client = new RegisterServiceClient();
client.Open();
UserEntity user = new UserEntity(surnameTextBox.ToString(),
emailTextBox.ToString());
user.Password = passwordTextBox.ToString();
user.Forename = forenameTextBox.ToString();
// client.AddNewUser(user);
client.AddNewUserAsync(user);
client.Close();
}
}
}
IRegisterService.cs :
using System.ServiceModel;
namespace WCFServiceWebRoleRegisterUser
{
[ServiceContract]
public interface IRegisterService
{
[OperationContract]
void AddNewUser(UserEntity user);
}
}
UserEntity.cs:
using Microsoft.WindowsAzure.Storage.Table;
namespace WCFServiceWebRoleRegisterUser
{
public class UserEntity : TableEntity
{
public UserEntity(string surname, string email)
{
this.PartitionKey = surname;
this.RowKey = email;
}
public UserEntity() { }
public string Forename { get; set; }
public string Surname { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
}
спасибо за ваши советы. (1) нет, как это видно в RegisterUserService.svc.cs, метод AddNewUserAsync (пользователь) не является асинхронной, я просто изменил эту строку с AddNewUser (user), поскольку я думал, что обновление не было предоставлено достаточно времени для завершить до client.close(); был выполнен. следуя вашим советам, я закончил (2) и (3), я согласен, что это неправильно. Я пытался различать вещи. Теперь, однако, я получаю новую ошибку: – smoggers
Асинхронная операция не может быть запущена в это время. Асинхронные операции могут запускаться только в асинхронном обработчике или модуле или во время определенных событий в жизненном цикле страницы.Если это исключение произошло во время выполнения страницы, убедитесь, что страница отмечена <% @ Page Async = "true"%>. Это исключение может также указывать на попытку вызвать метод async void, который обычно не поддерживается в обработке запросов ASP.NET. Вместо этого асинхронный метод должен возвращать задачу, и вызывающий должен ее ждать. – smoggers
эта проблема решена, я не совсем уверен, как теперь сущности добавляются в таблицу. Хотя этот ответ не разрешил проблему, это было полезно, и поэтому я принял ответ. Приветствия. – smoggers