2013-10-14 34 views
0

我試圖從windows Azure上的html頁面生成屏幕截圖。 這是我在個人IIS上使用的代碼,我知道它適用於每臺測試機器。從Windows Azure上的html頁面生成屏幕截圖

using System.Drawing; 
using System.Drawing.Imaging; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Windows.Forms; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     new WebsiteToImage("http://www.google.com", "C:\\screenshot.jpg"); 
    } 

    // Define other methods and classes here 
    public class WebsiteToImage 
    { 
     internal string _url; 
     internal string _fileName; 

     public WebsiteToImage(string url, string fileName) 
     { 
      _url = url; 
      _fileName = fileName; 

      // Thread 
      var thread = new Thread(Generate); 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
      thread.Join(); 
     } 

     private void Generate() 
     { 
      using (var browser = new WebBrowser { ScrollBarsEnabled = false }) 
      { 
       browser.Navigate(_url); 
       browser.DocumentCompleted += WebBrowser_DocumentCompleted; 

       while (browser.ReadyState != WebBrowserReadyState.Complete) 
       { 
        Application.DoEvents(); 
       } 

       browser.Dispose(); 
      } 
     } 

     private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      // Capture 
      using (var bmp = new Bitmap(1280, 800)) 
      { 
       var browser = (WebBrowser)sender; 
       browser.ClientSize = new Size(1280, 800); 
       browser.ScrollBarsEnabled = false; 
       browser.BringToFront(); 
       browser.DrawToBitmap(bmp, browser.Bounds); 

       var encoderParameters = new EncoderParameters(1); 
       encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); 
       bmp.Save(_fileName, ImageCodecInfo.GetImageDecoders().FirstOrDefault(c => c.FormatID.Equals(ImageFormat.Jpeg.Guid)), encoderParameters); 
      } 
     } 
    } 
} 

現在,在Azure上我知道我不能使用GDI +,而且我很確定我不能使用WebBrowser。 任何想法或替代解決方案?即使是第三部分組件。

+0

我想知道爲什麼你認爲你不能在Windows Azure上使用GDI +?是指「Azure網站」還是「Azure雲服務(又名Web角色)」?我很確定你可以在Web角色上使用GDI +! – astaykov

回答

0

更新:Awesomium should be an option在這種情況下。

+0

不幸的是,這項服務有一個配額,需要註冊。我們需要弄清楚我們是否可以首先在我們的服務器上實現它。 –

+0

@ Sig.Tolleranza答覆已更新。 –

+0

該服務用於查看控制檯應用程序內的網頁。 –

1

您還沒有說過您是使用Azure網站還是使用Azure雲服務,但是根據您所說的無法使用GDI +的說法,我在猜測網站?

您當然應該能夠在Web Service或Worker角色的Cloud Service中運行代碼。如果代碼是託管在Web站點上的Web應用程序的一部分,則可以使用Azure存儲隊列添加要快照的URL,然後輪詢該工作區角色的隊列,運行代碼並將生成的文件存儲到Blob存儲。

如果您在屏幕截圖服務器上的預期負載很低,那麼您可能會得到一個額外的小實例,這會花費很少。

+0

我會給加號,但我更喜歡更簡單的解決方案。 –