Je suis d'apprendre à utiliser le CCR (Concurrency et coordination Runtime) en liaison avec un service Web asynchrone WCF.Utilisation du CCR avec Asynchronous service WCF
C'est le service de test WCF:
public class Service : IService
{
private Accounts.Manager accountManager = new Accounts.Manager();
public IAsyncResult BeginGetAccount(int id, AsyncCallback callback, object state)
{
//How Do I Call the CCR Function without blocking a Thread?
throw new NotImplementedException();
}
public string EndGetAccount(IAsyncResult result)
{
//How Do I Finish the Call and Pass back the Result?
throw new NotImplementedException();
}
}
Il faudra un numéro d'identification et retourner le nom du compte de contrepartie (le cas échéant)
J'ai écrit une fonction de CCR qui doit trouver le compte correspondant (s) (de toute évidence, il faut beaucoup de travail - c'est juste preuve de concept) Voici où je suis décollé. Comment puis-je repasser les résultats (port global?) ET plus important encore: Comment connecter le CCR à l'appel de service asynchrone WCF sans bloquer un thread?
public IEnumerator<ITask> GetAccount(int id)
{
SqlDataReader reader = null;
SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=BizData;Integrated Security=True;Async=True;");
string query = "SELECT * FROM Account WHERE AccountID = @AccountID";
SqlCommand command = new SqlCommand(query, connection);
SqlParameter accountID = new SqlParameter("AccountID", id);
command.Parameters.Add(accountID);
connection.Open();
yield return Arbiter.Choice(SQLAdapter.GetReader(command),
delegate(SqlDataReader r) { reader = r; },
delegate(Exception e) { Console.Write("Failed to get SQL data"); });
if (reader == null) yield break;
while (reader.Read())
{
Account account = new Account { ID = Convert.ToInt32(reader["AccountID"]),
Name = reader["Account"].ToString(),
ParkingNo = Convert.ToInt32(reader["ParkingNo"]),
Password = reader["Password"].ToString() };
//Post account?
}
connection.Close();
}