简体   繁体   English

异步Web服务

[英]Async web service

Say I have a very simple web service: 假设我有一个非常简单的Web服务:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SomeServices
{
    [OperationContract]
    [WebGet]
    public IEnumerable<int> GetSomeDatabaseNumbers()
    {
        return DB.GetMeSomeNumbers();
    }
}

The DBGetMeSomeNumbers method does some database retrieval. DBGetMeSomeNumbers方法执行一些数据库检索。

I've been reading that the above will cause the request to block while we're waiting for the database to retrieve the data so I'm looking to use the new async features in .net 4.5 to get rid of this blocking issue and handle more requests while we're waiting for the database to get back. 我一直在读,上面会导致请求阻塞,而我们正在等待数据库检索数据,所以我希望使用.net 4.5中的新异步功能来摆脱这个阻塞问题并处理我们在等待数据库返回时有更多请求。 I've rewritten by database call like so: 我已经通过数据库调用重写了这样:

public class DB {
    public static async Task<int[]> GetMeSomeNumbers()
    {
        List<int> rtnEntities = new List<int>();
        using (MySqlConnection sqlConn = new MySqlConnection(Settings.ConnectionString))
        {
            MySqlCommand sqlCmd = new MySqlCommand("SELECT number from SomeTable", sqlConn);
            sqlConn.Open();
            using (MySqlDataReader sqlRdr = await sqlCmd.ExecuteReaderAsync())
            {
                while (sqlRdr.Read())
                {
                    rtnEntities.Add(sqlRdr.GetInt32(0));
                }
                sqlRdr.Close();
            }
            sqlConn.Close();
        }
        return rtnEntities.ToArray();
    }
}

How do I modify my Web service call to use this new Async method? 如何修改我的Web服务调用以使用这种新的Async方法?

You can rewrite it this way: 你可以这样重写它:

public async Task<IEnumerable<int>> GetSomeDatabaseNumbers()
{
    return await DB.GetMeSomeNumbers();
}

Furthermore, I can't see any usages of generic type parameter in GetMeSomeNumbers<T> , so I assume you can remove it. 此外,我在GetMeSomeNumbers<T>不到泛型类型参数的任何用法,因此我假设您可以删除它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM