.net hbase rest api客户端库-从mvc5控制器调用

x759pob2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(348)

查看上给出的示例代码https://azure.microsoft.com/en-us/documentation/articles/hdinsight-hbase-tutorial-get-started/#use-net hbase rest api客户端库,
我正在尝试从mvc控制器连接到hbase,如下所示:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;

using Microsoft.HBase.Client;
using org.apache.hadoop.hbase.rest.protobuf.generated;

namespace MyHBaseTest.Controllers
{
    [RoutePrefix("api/myhbasetestcontroller")]
    public class MyHBaseTestController : ApiController
    {
        HBaseReader hbase = new HBaseReader();

        [HttpGet]
        [Route("")]
        public IHttpActionResult Index()
        {

            string clusterURL = "https://<yourHBaseClusterName>.azurehdinsight.net";
            string hadoopUsername = "<yourHadoopUsername>";
            string hadoopUserPassword = "<yourHadoopUserPassword>";

            // Create a new instance of an HBase client.
            ClusterCredentials creds = new ClusterCredentials(new Uri(clusterURL), hadoopUsername, hadoopUserPassword);
            HBaseClient hbaseClient = new HBaseClient(creds);

            // Retrieve the cluster version
            var version = hbaseClient.GetVersion();
            Console.WriteLine("The HBase cluster version is " + version);

            return Ok();
        }
    }
}

在调试模式下运行时,当我尝试在浏览器中查看url/api/myhbasetestcontroller时,它会一直加载页面,而不会在visualstudio中引发任何异常或任何东西。我等了15-20分钟,但什么都没变。
当我在控制台应用程序中尝试这样做时,它会在几秒钟内获得版本信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.HBase.Client;
using org.apache.hadoop.hbase.rest.protobuf.generated;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string clusterURL = "https://<yourHBaseClusterName>.azurehdinsight.net";
            string hadoopUsername= "<yourHadoopUsername>";
            string hadoopUserPassword = "<yourHadoopUserPassword>";

            // Create a new instance of an HBase client.
            ClusterCredentials creds = new ClusterCredentials(new Uri(clusterURL), hadoopUsername, hadoopUserPassword);
            HBaseClient hbaseClient = new HBaseClient(creds);

            // Retrieve the cluster version
            var version = hbaseClient.GetVersion();
            Console.WriteLine("The HBase cluster version is " + version);
        }
    }
}

我只是不明白这到底有什么不同。
你能给我一些建议吗?
非常感谢。

ndh0cuux

ndh0cuux1#

您使用的是阻塞同步api,这在mvc/web应用的上下文中不起作用(因为默认情况下使用了错误的异步上下文)。您需要使用异步版本的方法。e、 g.对于getversion,使用getversionasync。

ahy6op9u

ahy6op9u2#

从今天起,您需要在后台线程上运行您的呼叫。我遇到了同样的问题。我的调用被合并到一个函数下。我在后台线程上运行这个函数,一切都很好。

// POST: api/Vizzini
    [ResponseType(typeof(string))]
    public async Task<IHttpActionResult> GetResponse(string tweet)
    {
        string s = await Task.Run(() =>
        {
            return ResponseEngine.GetBestResponse(tweet);
        });
        return Ok(s);
    }

相关问题