2013-07-19 14 views
5

internet explorer otomatiği WCF web services oluşturuyorum. Aynı örnekte Internet Explorer'a erişmesi gereken birden çok web hizmeti çağrısı vardır. Ancak, WCF hizmetleri IIS üzerinde barındırıldığı için web hizmetine yapılan tüm çağrılar oturum 0'da yürütülür. Artık aynı örnek Internet Explorer'a erişmek için Internet Explorer örneğinin pencere tanıtıcısını döndüren SHDocVw.InternetExplorer.HWND özelliğini kullanıyorum. Aşağıdaki kod WCF hizmeti olarak IIS 7 üzerinde yürütüldüğünde, pencere tanıtıcıları her zaman oturum 0 yalıtımı nedeniyle 0 değerini döndürür. Ayrıca, aynı IE örneğine tekrar bağlanamaz veya tüm açık IE pencereleri arasında döngü yapamıyorum. İşlem listesini numaralandırabilir ve her IE penceresi için oturum kimliklerini oturumda açabilirim, ancak System.Diagnostics.Process - SHDocVw.InternetExplorer nesnesine atayamıyorum. Herhangi bir yardım çok takdir edilecektirOturum 0'da çalışan bir internet explorer penceresi nasıl benzersiz bir şekilde tanımlanır?

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; 
} 

:

Aşağıda benim kodudur.

+2

bakabilirsiniz. Daha sonra internet explorer'ı doğrudan web servisinizden kontrol etmeye çalışmak yerine, uydu işleminize kontrol komutları göndermek için bazı süreçler arası iletişim mekanizmasını (adlandırılmış borular, WCF veya .Net Remoting) kullanın; . Ayrıca, web hizmetiniz ile uydu işleminiz arasındaki iletişimi, özellikle uydu işleminiz, oturum açmış olan kullanıcıdan daha yüksek ayrıcalıklarla çalışıyorsa, sağlamalısınız. – Hans

+1

Bunun yerine [WebDriver] (https://code.google.com/p/selenium/wiki/InternetExplorerDriver) kullanmayı düşünün. – Aron

+0

Teşekkürler @Hans .. Yaklaşımınıza dayanarak bazı testler yaptım (adlandırılmış borular kullanarak) ve çok iyi çalışıyor. Yardım ettiğin için teşekkür ederim! – Neville

cevap

2

IIS7'de yalıtmadan tamamen çıkmak zor, ancak benzer bir senaryoda yaptığım şey şu: IIS'de, uygulama havuzunuzda Gelişmiş Ayarlar'a gidin ve pencere kullanıcısı olarak çalışacak şekilde ayarlayın. En az bir kez bu kullanıcı ile oturum açtığınızdan emin olun (.net, belgelenmemiş bazı klasörler oluşturur). Benim durumumda

Gerçek

için Seti Yük Kullanıcı Profili MS Office'i otomatik hale, bu yüzden aşağıdaki 2 ek adımları (ilk geçerli olabilir) vardı: C: \ Windows \ System32 \ config \ SystemProfile Masaüstü klasörü oluşturun, o izinler C yazma vermek: \ Windows \ System32 \ config \ SystemProfile \ AppData \ Roaming \ Microsoft \ Templates emin normal.dotm orada yapmak ve bu yazma izni

Sonraki, DCOM ayarları değiştirmek Start -> run -> comexp.msc

nesneleri vardır

Open Component Services -> Computers -> My Computer -> DCOM Config loca ınternet Explorer girdisi, Right-click -> Properties -> Identity Tab -> select The interactive user

Alternatif olarak, kullanım durumunuz izin veriyorsa, WPF uygulamasını bir WPF uygulamasında barındırır ve gerekirse, uygulamanın içinde bir Internet Explorer penceresi barındıracak kadar ileri gidebilirsiniz. daha fazla kontrol sizde. Tarayıcı kontrol API'sı, ilk önce (intelli sense bilge) uygun türe dönüştürünceye kadar sınırlı görünüyor. Gerekirse gönderebilirim.

DÜZENLEME: Ayrıca senin sorununa tek çözüm Internet Explorer gibi aynı oturumda çalışan bir uydu sürecini oluşturmak için olduğunu düşünüyorum http://support.microsoft.com/kb/555134

İlgili konular