2017-04-20 37 views
-1

내 COM 구성 요소를 호스팅하고 IIS에서 시작할 때 WinForm을 사용했지만 테스트 도중에 VS에서 정상적으로 작동하지만 IIS에 게시 한 후에 예외가 발생하고 예외가 발생했습니다. 그런 다음 응용 프로그램 풀이 손상되었습니다. 처음에는 COM 등록과 관련 있다고 생각했지만 동일한 COM을 호출하는 테스트 winform 응용 프로그램을 작성하고 동일한 서버에서 올바르게 작동합니다.IIS 사용 COM 가져 오기 클래스가 등록되지 않았습니다 예외가

누구나?

class FaceScannerServerHost : Form 
{ 
    public FaceScannerServerHost(Control control, bool hidden = false) 
    { 
     if (control.IsHandleCreated) throw new InvalidOperationException("control already committed to wrong thread"); 
     if (hidden) this.Opacity = 0; 
     this.Hide(); 
     this.ShowInTaskbar = false; 

     using (initDone = new ManualResetEvent(false)) 
     { 
      thread = new Thread((_) => 
      { 
       try 
       { 
        //COM control 
        AxC_FaceServerSdk axc = (AxC_FaceServerSdk)control; 
        this.Controls.Add(axc); 

        //crashed here 
        Application.Run(this); 

       } 
       catch (Exception exp) 
       { 
        TraceLog.Debug("AxServer", exp.Message); 
       } 
      }); 
      thread.IsBackground = true; 
      thread.SetApartmentState(ApartmentState.STA); 

      thread.Start(); 
      initDone.WaitOne(); 
     } 
    } 

답변

0

옵션을 : 당신의 IIS에 asp.net

  1. 를 등록?
  2. 응용 프로그램 풀의 프레임 워크를 확인하십시오.
  3. 디렉터리 검색을 사용합니다.
  4. 모든 dll이 포함되어 있는지 확인하십시오.
  5. 32 또는 64 비트 서버인지 확인하십시오.
+0

그냥 5 포인트. 나는 COM이 32 비트라고 생각하지만, 어떻게해야할지 모르겠다. –