Tôi đang tạo WCF web services
rằng automatea internet explorer
. Có nhiều cuộc gọi dịch vụ web cần truy cập vào cùng một phiên bản Internet Explorer
. Tuy nhiên, vì các dịch vụ WCF
được lưu trữ trên IIS
tất cả các cuộc gọi đến dịch vụ web được thực hiện trong phiên 0. Bây giờ để truy cập vào cùng một trường hợp Internet Explorer
Tôi sử dụng thuộc tính SHDocVw.InternetExplorer.HWND
trả về tay cầm cửa sổ của phiên bản Internet Explorer
. Trong mã dưới đây khi được thực thi dưới dạng dịch vụ WCF
trên IIS 7
, tay cầm cửa sổ luôn trả về 0 do cách ly phiên 0. Ngoài ra, tôi không thể quay trở lại cùng một phiên bản IE
hoặc lặp qua tất cả các cửa sổ mở IE
. Tôi có thể liệt kê danh sách quy trình và tìm các id quá trình cho mỗi cửa sổ IE
mở trong phiên 0, nhưng không thể đúc đối tượng System.Diagnostics.Process
đến SHDocVw.InternetExplorer
.Cách nhận dạng duy nhất một cửa sổ trình khám phá internet đang chạy trong phiên 0?
Dưới đây là mã của tôi:
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;
}
Bất kỳ trợ giúp sẽ được nhiều đánh giá cao.
Tôi nghĩ rằng giải pháp duy nhất cho vấn đề của bạn là tạo ra một quá trình vệ tinh mà chạy trong cùng một phiên như Internet Explorer. Sau đó, thay vì cố gắng kiểm soát trình duyệt internet trực tiếp từ dịch vụ web của bạn, hãy sử dụng một số cơ chế giao tiếp liên tiến trình (như đặt tên theo đường ống, WCF hoặc .Net Remoting) để gửi lệnh điều khiển cho quá trình vệ tinh của bạn. . Bạn cũng nên bảo đảm thông tin liên lạc giữa dịch vụ web và quy trình vệ tinh của mình, đặc biệt nếu quá trình vệ tinh của bạn chạy với các đặc quyền cao hơn người dùng đã đăng nhập. – Hans
Thay vào đó, hãy cân nhắc sử dụng [WebDriver] (https://code.google.com/p/selenium/wiki/InternetExplorerDriver). – Aron
Cảm ơn @Hans .. Tôi đã chạy một số thử nghiệm dựa trên cách tiếp cận của bạn (sử dụng các đường ống có tên) và nó hoạt động rất tốt. Cảm ơn bạn đã giúp đỡ! – Neville