>

COM Interop을 사용하고 있으며 interop dll에서 COM 클래스 개체를 인스턴스화하고 있습니다. 따라서 몇 번이나 개체가 성공적으로 인스턴스화되고 문제없이 원격 프로 시저 호출을 수행하지만 때로는 RPC 서버를 사용할 수없는 것처럼 예외가 발생합니다. 사용중인 COM 구성 요소가 VB로 작성되었으며 C #에서 해당 구성 요소를 사용하고 있습니다.

따라서 누구나 문제의 가능한 원인 (RPC 서버를 사용할 수 없음)과이 문제에 대한 해결책을 말해 줄 수 있습니까?

지금까지이 문제에 무력합니다.

나를 도와 줄 수 있다면 미리 감사드립니다

  • 답변 # 1

    COM 구현에 대한 접근 방식을 검토 한 결과 버그를 발견했습니다. COM 인스턴스를 초기화하기 위해 정적 클래스를 사용하고 있었고 정적 생성자가 정적 생성자에서 발생했습니다. 따라서 응용 프로그램 세션 당 한 번 초기화가 수행되었습니다. com 인스턴스가 손상되거나 삭제 된 경우 COM 메서드를 호출하면 예외가 발생합니다 (RPC 서버를 사용할 수 없음). 그래서이 문제를 극복하기 위해 다음과 같은 접근 방식을 사용했습니다

    try
      {
        m_COMObject.SomeMethod();
      }
      Exception(exception exception)
      {
        DisposeCOMObject();
        InitializeCOMOBject();
        COMObject.Somethod();
      }
    
     public void DisposeCOMObject()
    {
      m_COMObject = null;
      var process = Process.GetProcessesByNames("COM .exe").FirstDefault();
       if(process != null)
        {
             process.kill();
           }
    }
    
     public void InitializeCOMObject()
    {
      m_COMObject = null;
      m_COMObject = new COMObject();
    }
    
    

    COM 인스턴스가 전화를 걸 수없는 경우 인스턴스를 삭제하고 COM을 다시 초기화하고 인스턴스를 가져온 다음 RPC 서버를 호출하십시오.

  • 이전 sql server 2005 - dateadd sql에 시간, 분, 초를 어떻게 추가합니까?
  • 다음 c++ - 심볼릭 링크가 가리키는 파일의 경로를 어떻게 결정합니까?