2016-03-25 3 views
0

Я создал новый веб-приложение в ВизуальныйСтудия , который начинается с вопроса нового пользователя для регистрации нового аккаунта. Пользователь заполняет свои данные через форму 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; } 
    } 
} 

ответ

0

Есть несколько вещей, которые я заметил в вашем коде. Пожалуйста, обратите внимание на них:

  1. Предполагая client.AddNewUserAsync(user); является async операция, вы можете ждать от этого. Таким образом, ваш код будет:

    Ожидать клиента.AddNewUserAsync (пользователь);

  2. В результате этого вам необходимо будет сделать метод registerButton_Clickasync.

  3. Я не понимаю, почему вы так часто выполняете операцию вставки в своем коде AddNewUser. В идеале вы должны выполнить эту операцию только один раз и захватить исключение хранилища и выполнить всю обработку ошибок.

    // Execute the insert operation. 
        table.Execute(insertOperation);//Wrap this in its own try/catch block and catch and handle StorageException type Exception. 
        //This piece of code is not really needed. 
        /* 
        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"); 
        } 
        */ 
    
+0

спасибо за ваши советы. (1) нет, как это видно в RegisterUserService.svc.cs, метод AddNewUserAsync (пользователь) не является асинхронной, я просто изменил эту строку с AddNewUser (user), поскольку я думал, что обновление не было предоставлено достаточно времени для завершить до client.close(); был выполнен. следуя вашим советам, я закончил (2) и (3), я согласен, что это неправильно. Я пытался различать вещи. Теперь, однако, я получаю новую ошибку: – smoggers

+0

Асинхронная операция не может быть запущена в это время. Асинхронные операции могут запускаться только в асинхронном обработчике или модуле или во время определенных событий в жизненном цикле страницы.Если это исключение произошло во время выполнения страницы, убедитесь, что страница отмечена <% @ Page Async = "true"%>. Это исключение может также указывать на попытку вызвать метод async void, который обычно не поддерживается в обработке запросов ASP.NET. Вместо этого асинхронный метод должен возвращать задачу, и вызывающий должен ее ждать. – smoggers

+0

эта проблема решена, я не совсем уверен, как теперь сущности добавляются в таблицу. Хотя этот ответ не разрешил проблему, это было полезно, и поэтому я принял ответ. Приветствия. – smoggers

 Смежные вопросы

  • Нет связанных вопросов^_^