0
私のロジックでは分かりませんが、私は期待はしませんが、アプリケーションがロックアップします。UWP Wcfサービスコールasyncが2回呼び出されたときに失敗する
コード:
ChatClient Service = new ChatClient();
public MainPage()
{
this.InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
var temp = Service.AuthenicateAsync(T1.Text, T2.Text).Result;
}
ChatClientコード:
public User Authenicate(string username, string password)
{
Clock.Restart();
var User = new User();
var Valid = false;
try
{
var VerificationQuery = Provider.CreateAdoCommand("select count(AccessToken) as 'Verified' from Users where [email protected] and [email protected];", Provider.CreateParameter("@user", DbType.String), Provider.CreateParameter("@pass", DbType.String));
var reader1 = VerificationQuery.ExecuteReader(username, password);
using (reader1.Open())
{//Check to see if the username and password is valid
while (reader1.MoveNext())
{
if (reader1.GetInt32("Verified").Value == 1)
{
Valid = true;
}
}
}
if (Valid)
{
var TokenQuery = Provider.CreateAdoCommand("select AccessToken, Timeout from Users where [email protected] and [email protected]", Provider.CreateParameter("@user", DbType.String), Provider.CreateParameter("@pass", DbType.String));
var reader2 = TokenQuery.ExecuteReader(username, password);
using (reader2.Open())
{//If the username and password is valid, retrieve the token and timeout period
while (reader2.MoveNext())
{
User.AccessToken = reader2.GetString("AccessToken");
User.TimeoutPeriod = reader2.GetDateTime("Timeout").Value;
}
}
//Check to see how old the timeout period is
var timeSub = User.TimeoutPeriod.Subtract(DateTime.Now);
if (timeSub.Days < 2)
{
//The token is too old, update the token, old token and timeout period
var TokenUpdateQuery = Provider.CreateAdoCommand("update Users set AccessToken=(NEWID()), [email protected], [email protected]", Provider.CreateParameter("@oldToken", DbType.String), Provider.CreateParameter("@newTime", DbType.Date));
using (TokenUpdateQuery.Open())
{
TokenUpdateQuery.ExecuteNonQuery(User.AccessToken, DateTime.Now.AddDays(30));
}
var FinalQuery = Provider.CreateAdoCommand("select AccessToken, Timeout from Users where [email protected] and [email protected]", Provider.CreateParameter("@user", DbType.String), Provider.CreateParameter("@pass", DbType.String));
var reader3 = FinalQuery.ExecuteReader(username, password);
using (reader3.Open())
{
while (reader3.MoveNext())
{
User.AccessToken = reader3.GetString("AccessToken");
User.TimeoutPeriod = reader3.GetDateTime("Timeout").Value;
}
}
}
//Database Query for user information
var UserQuery = Provider.CreateAdoCommand("select FirstName, LastName, Email, DateCreated, AccessToken, OldAccessToken, Timeout, ConnectionId from [Users] where [email protected];", Provider.CreateParameter("@token", DbType.String));
var reader4 = UserQuery.ExecuteReader(User.AccessToken);
using (reader4.Open())
{
while (reader4.MoveNext())
{
if (reader4.GetString("AccessToken").Equals(User.AccessToken))
{
User.FirstName = reader4.GetString("FirstName");
User.LastName = reader4.GetString("LastName");
User.Email = reader4.GetString("Email");
User.AccessToken = reader4.GetString("AccessToken");
User.OldAccessToken = reader4.GetString("OldAccessToken");
User.TimeoutPeriod = reader4.GetDateTime("Timeout").Value;
User.DateCreated = reader4.GetDateTime("DateCreated").Value;
User.ConnectionId = reader4.GetString("ConnectionId");
}
}
}
}
}
catch (Exception)
{
}
Clock.Stop();
User.SecondsProcessed = Clock.Elapsed.TotalSeconds;
return User;
}
サービスは、Visual Studioを使用して追加された私のWebサーバー上でホストされたWCFサービスです。私のアプリケーションの中には、2つのテキストボックスとボタンがあります。そのボタンをクリックすると、このメソッドが起動します。初めてそれは動作します。それを2回目にクリックし、ブレークポイントに続いてvar temp ...とヒットしますが、その後ただ落ちてしまい、アプリケーションがロックアップします。
サービスコードはどうですか? – EJoshuaS
それが確かに役立つならば、まともなサイズのコードです。 –
サービスで何が起こったのかに関するログがありますか? – EJoshuaS