none
Azure 服务总线 API 调用 RRS feed

  • 问题

  • 您好,我在调用你们相关API获取相关遥测信息时遇到一些问题,我引用你们提供的实例方法

    https://www.azure.cn/documentation/articles/aog-sample-code-service-bus-api

    在运行过程中出现问题

    var address = $"https://{serviceBusNamespace}.servicebus.chinacloudapi.cn/{queueName}/messages";

    serviceBusNamespace是填入了namespace,而queueName则填了 Hub name,我是否填写错了,应该怎么修改 ?

    要根据推送通知的Notification​Id,获取相关要遥测信息,最便捷的方式应该怎么弄?

    SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3},这样的令牌已经拿到,我应该怎么弄才可以

    根据 https://{namespace}.servicebus.windows.net/{NotificationHub}/messages/{notification message id}?api-version=2015-04

    获取到相关的遥测信息?

    2017年6月9日 8:44

全部回复

  • Hi liangsiping,

    >serviceBusNamespace是填入了namespace,而queueName则填了 Hub name,我是否填写错了,应该怎么修改 ?

    您参考的这篇文档:Azure 服务总线 API 调用示例 是服务总线 REST API 的示例代码,需要提供服务总线的相关参数,若代码您未作相关修改,此处的 serviceBusNamespace 和 queueName 应为下图所示参数:

    >要根据推送通知的Notification​Id,获取相关要遥测信息,最便捷的方式应该怎么弄?

    根据文档 获取通知消息遥测, 我们此处需要的是 Get 请求,所以根据示例代码稍作修改即可满足需求。

                HttpResponseMessage response = null;
                try
                {
                    // Post Request
                    // response = await httpClient.PostAsync($"{address}?timeout=60", postContent);
                    // Get Request
                     response = await httpClient.GetAsync($"{address}?timeout=60");
                    response.EnsureSuccessStatusCode();
                    Console.WriteLine("SendMessage successfully!");
                }
                catch (HttpRequestException ex)
                {
                    Console.WriteLine($"SendMessage failed: {ex.Message}");
                }


    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com


    2017年6月9日 10:35
    版主
  • 您好,我們沒有service bus namespace, 只有notification hub namespace,我应该怎么弄才能查询遥测信息?
    2017年6月12日 2:17
  • Hi,

    >我們沒有service bus namespace, 只有notification hub namespace

    您之前参考的文档 Azure 服务总线 API 调用示例 是 Service Bus 示例代码, 所以代码中需要您提供 Service Bus Namespace 以及 QueueName.

    对于获取通知中心遥测信息,您需要对该示例代码做部分修改,如下:

    1. 修改目标 URI:

    string address = $"https://{NotificationHubNamespace}.servicebus.chinacloudapi.cn/{NotificationHubName}/messages/{NotificationMessageID}?api-version=2015-04";


    2. 使用 Get 请求获取遥测信息:

    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", token);
    //httpClient.DefaultRequestHeaders.Add("ContentType", "application/xml;type=entry;charset=utf-8");
    httpClient.DefaultRequestHeaders.Add("x-ms-version", "2015-04");
    
    HttpResponseMessage response = null;
    try
    {
        // Post Request
        //response = await httpClient.PostAsync($"{address}?timeout=60", postContent);
        // Get Request
        response = await httpClient.GetAsync($"{address}?timeout=60");
        HttpResponseMessage receiveMessage = response.EnsureSuccessStatusCode();
        Console.WriteLine("successful!");
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"failed: {ex.Message}");
    }
    response.Dispose();

    3. 对应的 NotificationHubNamespace,NotificationHubName, KeyName, Key 都可以在经典管理门户获得, 如下图:


    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com

    2017年6月12日 10:14
    版主
  • 你好,

    用了你提供的目标URI,请求出错:

    string address = $"https://{NotificationHubNamespace}.servicebus.chinacloudapi.cn/{NotificationHubName}/messages/{NotificationMessageID}?api-version=2015-04"

    我就试用https://msdn.microsoft.com/zh-cn/en-us/library/azure/mt608135.aspx这个文档提供的目标URI:

    https://{namespace}.servicebus.windows.net/{NotificationHub}/messages/{notification message id}?api-version=2015-04,没有出现请求错误,但是返回401错误,授权不成功:

    我的代码如下:



    2017年6月13日 7:40
  • *.servicebus.windows.net 为国际版 Azure 的资源端点;

    世纪互联运营的 Azure 应使用: *.servicebus.chinacloudapi.cn.


    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com

    2017年6月14日 5:57
    版主
  • 你好,当我一用这个目标URI会请求出错:

    string address = $"https://{NotificationHubNamespace}.servicebus.chinacloudapi.cn/{NotificationHubName}/messages/{NotificationMessageID}?api-version=2015-04"

    notificationHubNamespace、NotificationHubName 和NotificationMessageID都是存在的,但是一调用GetAsync()方法就出错;

    2017年6月14日 9:51
  • 你好,补充一下,我用的是境外azure,所以是用*.servicebus.windows.net 的目标URI,但是不能授权,所以请你帮忙看一下以上的代码哪里写漏了,或写错了导致不能授权
    2017年6月15日 6:47
  • Hi,

    > https://{namespace}.servicebus.windows.net/{NotificationHub}/messages/{notification message id}?api-version=2015-04,没有出现请求错误,但是返回401错误,授权不成功

    401 错误是您 SAS Token 的问题,代码中 sinceEpoch : 1970.1.1 是用于计算 UTC 起始时间的,不可以更改。

    SAS URI 定义请参考:SAS URI 的示例

    TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);

    MSDN 社区技术支持
    如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com

    2017年6月21日 2:38
    版主
  • 请参考这个连接,里面写的很详细

    http://www.cnblogs.com/tianqing/p/5944573.html

    我们用的中国的Azure(21V运营的)

    首先需要在Windows Azure的Portal上建立ServiceBus的NameSpace:


    ericzhou

    2017年6月21日 4:56