2015-04-19 120 views
1

我已經爲Windows服務器設置了服務總線1.1,並嘗試使用以下代碼訪問它。從Windows服務訪問服務總線1.1

var sbUriList = new List<Uri>() { new UriBuilder { Scheme = "sb", Host = ServerFQDN, Path = ServiceNamespace }.Uri }; 
    var httpsUriList = new List<Uri>() { new UriBuilder { Scheme = "https", Host = ServerFQDN, Path = ServiceNamespace, Port = HttpPort }.Uri }; 

    NetworkCredential credential = new NetworkCredential("<User Name>", "<Password>", "<Domain>"); 

    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((s, cert, chain, ssl) => { return true; }); 

    TokenProvider tokenProvider = TokenProvider.CreateOAuthTokenProvider(httpsUriList, credential); 
    messageFactory = MessagingFactory.Create(sbUriList, tokenProvider); 



    ServiceBusConnectionStringBuilder connBuilder = new ServiceBusConnectionStringBuilder(); 
    connBuilder.ManagementPort = HttpPort; 
    connBuilder.RuntimePort = TcpPort; 
    connBuilder.Endpoints.Add(new UriBuilder() { Scheme = "sb", Host = ServerFQDN, Path = ServiceNamespace }.Uri); 
    connBuilder.StsEndpoints.Add(new UriBuilder() { Scheme = "https", Host = ServerFQDN, Port = HttpPort, Path = ServiceNamespace }.Uri); 

    namespaceManager = NamespaceManager.CreateFromConnectionString(connBuilder.ToString()); 

if (!namespaceManager.QueueExists(queuename)) 
{ 
    namespaceManager.CreateQueue(queuename); 
} 

如果我運行從一個控制檯應用程序我的代碼,這工作得很好,但是但是如果我把這個在窗口服務代碼拋出下,無論是本地服務運行本地系統在嘗試檢查隊列是否存在於以下行namespaceManager.QueueExists(queuename)中時出現以下異常。

Unexpected exception : System.UnauthorizedAccessException: The remote server returned an error: (401) Unauthorized. Manage claim is required for this operation..TrackingId:5be1365e-b4ae-4555-b81b-dcbef96be9d0_GIE11LT32PD622,TimeStamp:4/19/2015 3:51:28 PM ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized. 
    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1.<GetAsyncSteps>b__2d(GetAsyncResult`1 thisPtr, IAsyncResult r) 
    at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result) 
    --- End of inner exception stack trace --- 

有人能幫我理解我在做什麼錯嗎?

+0

請刪除您的問題 - 哪一個是您自己的代碼中的錯誤... – Sreeram

+0

@Sreeram:我可以刪除它,但花了將近2天才弄清楚如何使其工作。互聯網上幾乎沒有資源可以告訴你如何做到這一點。所以我以爲我會把它留在這裏,以防其他人有類似的問題。 – Kiran

+0

@Kiran,我不認爲這是刪除問題的有效理由。你應該刪除你的downvote。 FYI:我發現這篇文章很有幫助。這不是一個錯誤,而是微軟提供的一個完整的walkthru。我無法在其他地方找到這個答案! – maplemale

回答

3

終於在我的代碼中發現了這個問題,以爲我會分享它,以防其他人有同樣的問題。

我的問題是,在命名空間我沒有設置令牌如下:

namespaceManager.Settings.TokenProvider = tokenProvider;

作爲它用連接,因此錯誤的錯誤標記的結果。