簡體   English   中英

無法將REST API用於Windows Server 1.1的Service Bus(OnPremises)

[英]Not able to use REST API for Service Bus for Windows Server 1.1 (OnPremises)

我正在使用Window Server Service Bus 1.1。 我能夠使用以下基址從Window Server Service Bus生成OAuth令牌

  string baseAddressHttp = "https://" + ServerName + ":9355/" + Namespace + "/$STS/OAuth/"; 

對於用於將消息發送到隊列的Window Azure Service Bus,我可以在以下隊列地址上發出請求

        string serviceNamespace = "ServiceBusDefaultNamespace";
        string queueName = "SampleQueuName";
        string message ="This is my first message";
        string queueAddress = "https://" + serviceNamespace + ".servicebus.windows.net/"+ queueName + "/messages";
        WebClient webClient = new WebClient();
        webClient.Headers[HttpRequestHeader.Authorization] = token;
        webClient.UploadData(baseAddress, "POST", Encoding.UTF8.GetBytes(message));

但對於窗口服務器服務總線,相同的技術不起作用。

Window Server Service Bus 1.1是否支持REST API? 任何幫助將非常感激。

提前致謝!!

是的它確實支持它。 我們正在使用它。

  1. 我認為您的默認命名空間端點是錯誤的 - 您不需要.servicebus.windows.net
  2. 您需要首先使用具有監聽或發送服務總線權限的用戶的用戶名和密碼從sts獲取令牌。
  3. 必須以特定格式發布服務總線用戶的用戶名和密碼。
  4. 然后,您需要將返回的令牌添加到授權標頭中,並將實際的發送或偵聽請求發送到/ messages端點。
  5. 這段代碼應該這樣做:

     private const string DefaultNamespace = "https://yoursbserver:9355/servicebusdefaultnamespace"; private const string QueueEndpoint = "https://yoursbserver:9355/servicebusdefaultnamespace/YourQueueNameOrTopicName/messages/?timeout=60"; private static void Main() { var token = GetOAuthTokenFromSts(new Uri(DefaultNamespace), "usernamewithpermissiononServiceBus", "password", TimeSpan.FromMinutes(10)); var messageXml = CreateXml(); SendMessage(token, messageXml); Console.WriteLine("Successfully posted message!"); Console.ReadLine(); } private static string CreateMessage() { return "<SomeMessage xmlns='MyNamespace'></SomeMessage>"; } public static string GetOAuthTokenFromSts(Uri namespaceBaseAddress, string userName, string userPassword, TimeSpan timeout) { const string stsPath = "$STS/OAuth/"; var requestUri = new Uri(namespaceBaseAddress, stsPath); var requestContent = GetRequestContent(namespaceBaseAddress, userName, userPassword); var request = CreateRequest(timeout, requestUri, requestContent); return GetAccessToken(request, requestContent); } private static HttpWebRequest CreateRequest(TimeSpan timeout, Uri requestUri, byte[] requestContent) { var request = WebRequest.Create(requestUri) as HttpWebRequest; request.ServicePoint.MaxIdleTime = 5000; request.AllowAutoRedirect = true; request.MaximumAutomaticRedirections = 1; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = requestContent.Length; request.Timeout = Convert.ToInt32(timeout.TotalMilliseconds, CultureInfo.InvariantCulture); return request; } private static byte[] GetRequestContent(Uri namespaceBaseAddress, string userName, string userPassword) { const string clientPasswordFormat = "grant_type=authorization_code&client_id={0}&client_secret={1}&scope={2}"; var requestContent = string.Format(CultureInfo.InvariantCulture, clientPasswordFormat, HttpUtility.UrlEncode(userName), HttpUtility.UrlEncode(userPassword), HttpUtility.UrlEncode(namespaceBaseAddress.AbsoluteUri)); return Encoding.UTF8.GetBytes(requestContent); } private static string GetAccessToken(HttpWebRequest request, byte[] requestContent) { string accessToken; using (var requestStream = request.GetRequestStream()) { requestStream.Write(requestContent, 0, requestContent.Length); } using (var response = request.GetResponse() as HttpWebResponse) using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream, Encoding.UTF8)) { accessToken = reader.ReadToEnd(); } return string.Format(CultureInfo.InvariantCulture, "WRAP access_token=\\"{0}\\"", accessToken); } private static void SendMessage(string token, string message) { var webClient = new WebClient(); webClient.Headers[HttpRequestHeader.Authorization] = token; webClient.UploadData(QueueEndpoint, "POST", Encoding.UTF8.GetBytes(message)); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM