나는 WCF web services
이 자동으로 internet explorer
인 것을 생성 중이다. Internet Explorer
의 동일한 인스턴스에 액세스해야하는 여러 웹 서비스 호출이 있습니다. 그러나 WCF
서비스는 IIS
에 호스팅되므로 웹 서비스에 대한 모든 호출은 세션 0에서 실행됩니다. 이제 Internet Explorer
의 동일한 인스턴스에 액세스하려면 Internet Explorer
인스턴스의 창 핸들을 반환하는 SHDocVw.InternetExplorer.HWND
속성을 사용합니다. 아래 코드에서 IIS 7
에 WCF
서비스로 실행하면 창 핸들은 세션 0 격리로 인해 항상 0을 반환합니다. 또한 열려있는 모든 IE
창을 통해 같은 IE
인스턴스 또는 루프로 다시 연결할 수 없습니다. 프로세스 목록을 열거하고 각 IE
창의 프로세스 ID를 세션 0에서 열어 볼 수 있지만 System.Diagnostics.Process
을 SHDocVw.InternetExplorer
개체로 캐스팅 할 수는 없습니다. 어떤 도움이 많이 이해할 수있을 것이다세션 0에서 실행중인 Internet Explorer 창을 고유하게 식별하는 방법은 무엇입니까?
public int GetWhd()
{
InternetExplorer ie = new InternetExplorer();
ie.Visible = true;
return ie.HWND;
}
public int SetWhd(string whd)
{
int wh = Int32.Parse(whd);
InternetExplorer ie = null;
ShellWindows s = new ShellWindows();
foreach (SHDocVw.InternetExplorer ie1 in s)
{
try
{
if (ie1.HWND == wh)
{
ie = ie1;
break;
}
}
catch { return 2; }
}
if (ie != null) { ie.Navigate("www.google.com"); return 1; }
return 0;
}
:
다음은 내 코드입니다.
를보십시오. 그런 다음 웹 서비스에서 직접 인터넷 익스플로러를 제어하려고 시도하는 대신 (웹 서비스를 대신하여 제어하는) 위성 프로세스에 제어 명령을 보내기 위해 일부 프로세스 간 통신 메커니즘 (예 : 명명 된 파이프, WCF 또는 .Net Remoting)을 사용하십시오. . 특히 위성 프로세스가 로그온 한 사용자보다 높은 권한으로 실행되는 경우 웹 서비스와 위성 프로세스 사이의 통신을 보호해야합니다. – Hans
대신 [WebDriver] (https://code.google.com/p/selenium/wiki/InternetExplorerDriver)를 사용하는 것이 좋습니다. – Aron
Thanks @ Hans .. 명명 된 파이프를 사용하여 접근법을 기반으로 몇 가지 테스트를 실행했으며 매우 잘 작동합니다. 당신의 도움을 주셔서 감사합니다! – Neville