2011-04-06 57 views
1

我有一個寫在vb6中的activeX dll。裏面的代碼,它使用了​​(使用PaintPicture從aspx頁面訪問ACTIVEX DLL中的資源

如果我打電話使用ASPX頁面此DLL,即在Windows 2008機器上運行託管加載圖像,它然後發送到打印機IIS 7.0,圖像沒有按不打印。

如果我在同一臺服務器上使用VBS腳本調用此DLL,則圖像打印正常。

當aspx頁面託管在Windows 2000 Server上時,用於正常打印的圖像。

這裏是VBS代碼:

Dim CheckCtl 
set CheckCtl = CreateObject("CHECKCONTROL.CHECK") 

CheckCtl.FBOAccountID = 2765 
CheckCtl.includesignature = True 
CheckCtl.Amount = 500.00 
CheckCtl.CheckDate = #04/06/2011# 
CheckCtl.Payee_L1 = "Donald Trump" 
CheckCtl.Payee_L2 = "10 Park Place" 
CheckCtl.Payee_L3 = "Atlantic City, NJ 00011" 
CheckCtl.Payee_L4 = "" 
CheckCtl.Notes = "This is a test check" 
CheckCtl.SubmittedBy = "Accountant" 

dim lSuccess 
lSuccess = CheckCtl.Printcheck() 

這裏是ASPX VB.NET代碼:

Dim CheckCtl As checkcontrolNET.Check 
CheckCtl = New checkcontrolNET.Check 
CheckCtl.FBOAccountId = 2765 
CheckCtl.IncludeSignature = True 
CheckCtl.Amount = 500.0 
CheckCtl.CheckDate = "04/06/2011" 
CheckCtl.Payee_L1 = "Donald Trump" 
CheckCtl.Payee_L2 = "10 Park Place" 
CheckCtl.Payee_L3 = "Atlantic City, NJ 00011" 
CheckCtl.Payee_L4 = "" 
CheckCtl.notes = "This is a test check" 
CheckCtl.SubmittedBy = "Accountant" 

Dim lSuccess As Boolean 
lSuccess = CheckCtl.printcheck() 
Response.Write(lSuccess) 

我缺少什麼?

回答

0

這聽起來很像權限問題。我懷疑你的Windows 2000服務器在SYSTEM帳戶下運行IIS,可能與舊的ASPNET工作進程帳戶一樣。

檢查站點下運行的帳戶是否有權打印。根據您如何確保該網站,這可能是任何一個:

  • 應用程序池標識
  • 具體的匿名帳戶
  • IUSR帳戶
+0

我競選對手的經典.net應用程序池。在應用程序池標識爲NETWORKSERVICE的高級屬性下。這是否意味着我需要給CheckControl.dll文件提供networkService讀取權限? – Aheho 2011-04-06 18:01:31

+0

@aheho - 是的,這將是一個好的開始。 – Kev 2011-04-06 18:14:28

+0

沒有區別。 – Aheho 2011-04-06 18:25:50

1

是您的服務器64有沒有機會?根據MSDN的說法,該函數的.Net版本僅在32位版本上受支持,因此VB6版本可能也是如此。

http://msdn.microsoft.com/en-us/library/ms652936.aspx

+0

服務器是32位的。當我通過命令行vbs腳本運行它時,它在該服務器上運行良好。 – Aheho 2011-04-13 12:58:50

+0

對不起,我錯過了VBS部分。我會傾向於@Kev關於權限的說法。在服務器上運行命令'dcomcnfg',它將啓動組件服務管理器。提示打開'控制檯根,組件服務,計算機,我的電腦,DCOM配置並在那裏尋找你的組件。右鍵單擊它,選擇屬性並轉到安全選項卡。您可能必須更改前兩個中的一個或兩個,以添加運行您的應用程序池的安全帳戶。 – 2011-04-13 14:01:55

+0

我在DCOM配置下看不到它。它會被guid列出嗎? – Aheho 2011-04-13 14:34:26

1

我發現COM +的方法對VB的ActiveX IIS古怪。我希望你可以控制VB6 Dll代碼,如果是這樣,請嘗試將這些代碼放入你試圖實例化的VB6類中。

Private moScriptCtx As ScriptingContext 

Public Sub OnStartPage(SC As ScriptingContext) 

    Set moScriptCtx = SC 

End Sub 

您現在可以將請求,響應,服務器等作爲moScriptCtx對象的屬性進行訪問。在CreateObject執行過程中,ASP爲你自動調用OnStartPage()

[編輯]

,如果你不期運用ASP的內在屬性這可能不是你的情況是有用的,但儘量COM +管理控制檯上實現這一點。

Fire up the COM+ management consoleo  
Find the COM+ Application in questiono  
Find the applicable component in the 'Components' folder 
Right click on it and choose properties 
Select the Advanced tab 
Check the 'Allow IIS Intrinsic Properties' checkbox 

http://blogs.msdn.com/b/distributedservices/archive/2010/04/28/iis-intrinsic-properties-are-disabled-by-default-on-windows-2008-and-windows-2008-r2.aspx

+0

爲什麼我需要訪問此控件中的請求,響應或服務器對象?這將如何解決我的問題? – Aheho 2011-04-18 16:16:20

+0

你的LoadResPicture()方法是做什麼的?你可以發佈該代碼嗎? – Priyank 2011-04-18 16:50:08