2010-04-22 1 views
1

MessageQueue (string queuePath) 생성자를 사용하여 System.Messaging.MessageQueue를 만들고 MessageQueue.Send (obj)를 사용하면 '임시 클래스 (결과 = 1)를 생성 할 수 없습니다'라는 예외가 추가 텍스트와 함께 발생합니다. '오류 CS0122 :'시스템 .__ ComObject '보호 수준으로 인해 액세스 할 수 없습니다'.C#에서 MSMQ 대기열로 보낼 때 CS0122 오류의 원인 및 해결 방법은 무엇입니까?

대기열 자체는 모든 사람에게 모든 권한을 부여합니다. MessageQueue 개체에 대한 읽기 쓰기 권한을 쿼리하면 SendAndReceive가 반환됩니다. 이 오류의 원인은 무엇이며 어떻게 해결합니까?

답변

5

오, 기쁨, 런타임 오류가 컴파일 시간 오류와 섞여 있습니다. MessageQueue는 XML serialization을 사용하여 Message가 아닌 객체를 직렬화합니다. 빌드시에 sgen.exe를 사용하여 직렬화 어셈블리를 만들지 않았다면 (은 정말로이어야 함) 런타임시 어셈블리를 생성합니다.

분명히 실패합니다. Send()로 전달하는 객체가 XML 직렬화를 지원하지 않습니다. 오류 메시지로 판단하면 단순한 .NET 클래스가 아니기 때문일 수 있습니다. XmlSerializer.Serialize() 및 그 이후의 상태를 유지하는 간단한 .NET 클래스로 해결하십시오.

+0

이것은 실제로 내 문제에 대한 정답이지만 내 문제의 해결책은 아닙니다. 필자는 파트너 응용 프로그램에서 처리 할 수있는 형식으로 데이터를 serialize 할 수있는 IMessageFormatter를 구현하는 자체 포맷터를 작성했습니다. .net에서 큐에 평면 래핑되지 않은 문자열을 넣는 것이 더 어렵습니다. – Erick

관련 문제