我正在編寫一個程序,將文檔從ApplicationXtender(AX)中的一個應用程序移動到另一個應用程序。 AX功能齊全的客戶端已經有了一個可以處理任務的程序(遷移向導),所以我創建了一個函數,該函數使用Process.Start()啓動它並提供使其自動執行所需的參數。當我從控制檯應用程序或Windows窗體應用程序調用該函數時,遷移向導完美地工作。但是,流程必須由基於Web的工作流項目中的事件啓動,因此我編寫了一個包含相同功能的Web服務,然後在工作流中使用調用Web服務控件來啓動它。當我使用Web服務的功能時,該過程沒有完成。我可以看到它掛在任務管理器中。我很確定它與IIS中的用戶設置有關,但是我對IIS不夠熟悉,沒有發現任何重大差異。我在IIS中配置了匿名身份驗證的用戶身份,以便與具有完全AX權限的特定用戶一起啓動,並將DefaultAppPool設置爲以本地系統身份運行,但都不起作用。我想我可能需要冒充用戶,但我不知道該怎麼做。有什麼建議麼?從Web服務調用進程無法工作VB.NET
作爲參考,這是我的代碼:
消費服務代碼 -
Sub Main()
Dim dbName As String
Dim appName As String
Dim preSalesNum As String
Console.WriteLine("Database: ")
dbName = Console.ReadLine
Console.WriteLine("")
Console.WriteLine("Application")
appName = Console.ReadLine
Console.WriteLine("")
Console.WriteLine("Pre-Sales Number:")
preSalesNum = Console.ReadLine
Console.WriteLine("")
MoveDocs.MoveDocs(dbName, appName, preSalesNum)
End Sub
MoveDocs功能(單獨類的內部) -
Public Shared Function MoveDocs(ByVal dbName As String, ByVal appName As String,
ByVal preSalesNum As String) As String
Try
Dim sourceApp As String
If appName = "PRE_SALES_PROJECTS" Then
sourceApp = "PROJECTS"
Else
sourceApp = "LOOSE-FURNITURE"
End If
Dim argsString As String = "/SD " & dbName & " /SU username /SP password /SA
" & appName & " /DD " & dbName & " /DU username /DP password /DA " &
sourceApp & " /S " & """" & preSalesNum & """" & " /A"
Dim procProp As New System.Diagnostics.ProcessStartInfo
With procProp
.FileName = "C:\Program Files (x86)\XtenderSolutions\Content
Management\MigrateWiz32.exe"
.Arguments = argsString
End With
Dim proc As System.Diagnostics.Process =
System.Diagnostics.Process.Start(procProp)
Return argsString
Catch ex As Exception
Return ex.ToString()
End Try
End Function
的MoveDocs()函數service.asmx文件與上面的文件相同,在聲明中減去'shared'修飾符。該應用程序的作品,網絡服務沒有。
我試過了,但它似乎沒有區別。無論指定哪個用戶,它都可以在控制檯或Windows應用程序中運行,但當Web服務啓動該進程時,這些用戶都不會工作。 –
如果你還沒有,你可以嘗試在IIS中啓用32位應用程序。另外,您是否能夠從流程標準錯誤或輸出流中捕獲任何信息? – kragan