Windows Service Bus 1.0 Brokered 메시징의 간단한 구현을 사용하여 특정 웹 응용 프로그램과의 사용자 상호 작용을 추적합니다.ServiceBus가 401 Unauthorized Error를 던졌습니다
ServiceBus.MessageQueue<T>.PushAsync(entity);
다음 개체를 직렬화하고 밖으로 메시지를 만들 것이다 :
뭔가가 데이터베이스에 "민감한"테이블에 저장 될 때마다, 나는 저장소 층과 같이 메시지를 보내 설정을 가지고 그것.
내 MessageQueue
클래스는 다음과 같습니다.
public static class MessageQueue<T>
{
static string ServerFQDN;
static int HttpPort = 9355;
static int TcpPort = 9354;
static string ServiceNamespace = "ServiceBusDefaultNamespace";
public static void PushAsync(T msg)
{
ServerFQDN = System.Net.Dns.GetHostEntry(string.Empty).HostName;
//Service Bus connection string
var connBuilder = new ServiceBusConnectionStringBuilder { ManagementPort = HttpPort, 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);
//Create a NamespaceManager instance (for management operations) and a MessagingFactory instance (for sending and receiving messages)
MessagingFactory messageFactory = MessagingFactory.CreateFromConnectionString(connBuilder.ToString());
NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connBuilder.ToString());
if (namespaceManager == null)
{
Console.WriteLine("\nUnexpected Error");
return;
}
//create a new queue
string QueueName = "ServiceBusQueueSample";
if (!namespaceManager.QueueExists(QueueName))
{
namespaceManager.CreateQueue(QueueName);
}
try
{
QueueClient myQueueClient = messageFactory.CreateQueueClient(QueueName);
string aaa = JsonConvert.SerializeObject(msg, Formatting.Indented,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new NHibernateContractResolver()
});
BrokeredMessage sendMessage1 = new BrokeredMessage(aaa);
sendMessage1.Properties.Add("UserName",Thread.CurrentPrincipal.Identity.Name);
sendMessage1.Properties.Add("TimeStamp", ApplicationDateTime.Now);
sendMessage1.Properties.Add("Type", msg.GetType().Name);
myQueueClient.Send(sendMessage1);
}
catch (Exception e)
{
var l = new Logger();
l.Log(LogEventEnum.WebrequestFailure, e.Message);
Console.WriteLine("Unexpected exception {0}", e.ToString());
throw;
}
}
}
로컬로 디버깅 할 때 완벽하게 작동합니다. 그러나 IIS에서 사이트를 게시하고 실행하면 namespaceManager.QueueExists(QueueName)
호출이 실패하고 "401 Unauthorized error"예외가 발생합니다.
관리자 계정으로 응용 프로그램 풀 ID (IIS에서)를 변경하면이 오류가 발생하지 않습니다. 그러나, 우리가 생산에 갈 때 이것이 일어날 수있는 방법은 절대적으로 입니다.
내가 누락 된 항목이 있습니까? 그렇다면 무엇입니까? 어떤 도움이라도 대단히 감사합니다.
감사합니다. Clemens에게 감사드립니다. 나는 그 모든 것을 놓친 것 같습니다. 이것은 논리적 인 수정이라고 생각하여 아직 이것을 테스트하지는 않았지만 이것을 답으로 표시 할 것입니다. –