2013-11-01 43 views
0

我的理念是從url下載圖像併發送圖像(鏈接資源)到郵件消息到MSMQ !,我可以成功下載圖像,但我無法將它發送給MSMQ,我需要序列化替代視圖,我無法做到這一點?序列化替代視圖MSMQ

下面是代碼

MailMessage m = new MailMessage(); 
string strBody="<h1>This is sample</h1><image src=\"cid:image1\">"; 
m.Body = strBody; 
AlternateView av1 = AlternateView.CreateAlternateViewFromString(strBody, null, MediaTypeNames.Text.Html); 

在這裏,我從網址下載圖片

Stream DownloadStream = ReturnImage(); 
LinkedResource lr = new LinkedResource(DownloadStream, MediaTypeNames.Image.Gif); 
lr.ContentId = "image1"; 
av1.LinkedResources.Add(lr); 
m.AlternateViews.Add(av); 

private Stream ReturnImage() 
    { 

     try 
     { 
      HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(urlForImage); 

      webRequest.ProtocolVersion = HttpVersion.Version10; 
      webRequest.KeepAlive = false; 

      webRequest.Timeout = 1000000000; 
      webRequest.ReadWriteTimeout = 1000000000; 

      using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) 

      { 
       Stream k = webResponse.GetResponseStream(); 
       MemoryStream ms = new MemoryStream(); 
       int count = 0; 
       do 
       { 
        byte[] buf = new byte[1024]; 
        count = k.Read(buf, 0, 1024); 
        ms.Write(buf, 0, count); 
       } while (k.CanRead && count > 0); 
       return ms; 
      } 
     } 
     catch (WebException e) 
     { 
      return null; 
     } 

你們可以給序列化的另類觀點的解決方案,使我可以能夠發送和接收MSMQ !

回答

0

我不認爲你應該採取這種方法。

MSMQ被設計爲ligtwheight,所以發送像圖像這樣的巨大數據並非意圖 - 儘管這在技術上是可行的,當然。

另外請注意,MSQM每條消息的限制爲4 MB。根據圖像的大小,這可能會出現問題(或者可能不會)。

相反,我建議您將圖像保存到所有參與應用程序/服務/等可訪問的位置,例如,網絡共享,文件服務器或Web服務器,或者...

然後您只發送MSMQ消息中的URI。這在發送方和接收方都會很快處理。而且,MSMQ基礎架構的這個要輕得多。

+0

你的方法也是正確的,我使用asmx服務,我下載圖像到每個郵件的文件夾,但我無法刪除msmq收到後的文件夾圖像,它說圖像在工作進程 –

+0

@ MazherUlHaq:這與MSQM無關。它表示處理圖像的代碼沒有正確清理,並且保持處理圖像處於打開狀態。確保在適用的情況下調用適當的'Close()'(例如在Streams上)和'Dispose()'方法。還要注意隱藏的陷阱:我非常驚訝,Image.FromFile()在應用程序之前保持文件句柄處於打開狀態。 –