2012-03-14 7 views
3

우리는 현재 rfcomlib API와 함께 RightFax v9.3.2.89를 사용하고 있습니다. 현재이 팩스를 생성하는 응용 프로그램이 바탕 화면에 있기 때문에 모든 사용자의 컴퓨터에 RightFax를 설치했습니다. 웹 솔루션으로 이동하기 때문에 RightFax를 서버에만 설치합니다. 이 문제는 팩스를 성공적으로 보낼 수 없는지 사용자가 볼 수 없다는 것입니다. API를 보면서 나는 이런 식으로 뭔가를 할 수 있음을 참조하십시오완료된 이벤트를보기 위해 액세스가 거부되었습니다.

faxServer.Events.WatchCompleteEvents = BoolType.True; 
faxServer.OnCompleteEvent += faxServer_OnCompleteEvent; 

문제는 내가 완료 이벤트를보고 가입 할 때 나는이 볼 수있는 웹 브라우징

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

얻을 수 있다는 것입니다 오류는 백만 가지 소스에서 발생할 수 있습니다. 내 컴퓨터에 대한 관리 권한이 있기 때문에 이상합니다.

아이디어가 있으십니까?

불행히도, RightFax 사이트는 쓸모가 없으며 사용할 수있는 리소스가 거의 없습니다.

+1

이것은 DCOM 구성 오류와 같습니다. 대담한 네트워크에도 불구하고 이벤트에 가입하는 대신 5-10 초마다 상태를 폴링하는 것이 좋습니다. – Ben

+0

와우. 그것은 훨씬 더 쉽습니다. 핸들에 의해 보내진 팩스를 가져 와서'StatusDescription '이 무엇인지 볼 수 있습니다. 답변으로 의견을 게시하면 기꺼이 받아 들일 것입니다. 고맙습니다. – Nosila

답변

3

위의 Ben 메서드를 사용하면 상태 설명이 업데이트되지 않습니다. FaxUtil에서 팩스가 명확하게 전송되고 "OK"상태인데도 아래 예는 "대기 중"상태를 영원히 보여줍니다.

fax.Send(); 

while (fax.StatusDescription != "OK") 
{ 
    Console.WriteLine("Polling fax handle " + fax.Handle.ToString() 
        + " for status. Found: " + fax.StatusDescription); 
    Thread.Sleep(5000); 
} 

두 번째로 RightFax API에는 문서가없고 작업하기가 어렵습니다. 원래의 포스터가 도움이되기를 바랍니다.

0

팩스 폴링 .StatusDescription은 프로그램을 무한 루프에 넣습니다. 당신이해야 할 일은 해당 팩스 객체를 반복해서 폴링하는 것입니다. 다음 예제에서는 특정 폴더 내의 모든 팩스 개체를 가져와 필요한 팩스 개체 하나를 식별하고 개체의 StatusDescription을 쿼리합니다.

string status = ""; 
string description = ""; 
int handle = fax.Handle; // this identifies the fax object you're polling for 
while (status != "fsDoneOK") // keep polling fax object until status is "OK" 
{  
    foreach (Fax obj_fax in obj_user.Folders["Main"].Faxes) // look in the "Main" folder for fax objects 
    { 
     if (handle == obj_fax.Handle) // check to see if this object is yours 
     { 
      status = obj_fax.FaxStatus.ToString(); 
      description = obj_fax.StatusDescription; 
      System.Diagnostics.Debug.WriteLine("Fax Status: " + obj_fax.StatusDescription); 
     } 
     if (status == "fsDoneError" || status == "fsError") // check for fax error 
      break; 
    } 
    if (status == "fsDoneError" || status == "fsError") // check for fax error 
     break; 
    Thread.Sleep(3000); // sleep for 3 seconds and then poll again 
}