我正在编写一个程序,将文档从一个应用程序移动到 ApplicationXtender (AX) 中的另一个应用程序。AX 全功能客户端已经有一个可以处理任务的程序(迁移向导),所以我创建了一个函数,它使用 Process.Start() 启动它并提供自动化它所需的参数。当我从控制台应用程序或 Windows 窗体应用程序调用该函数时,迁移向导完美运行。但是该过程必须由基于Web的工作流项目中的事件启动,所以我编写了一个包含相同功能的Web服务,然后我在工作流中使用了一个调用Web服务控件来启动它。当我从 Web 服务中使用该功能时,该过程没有完成。我可以看到它挂在任务管理器中。我很确定这与 IIS 中的用户设置有关,但我 m 对 IIS 不够熟悉,无法做出任何重大改变。我在 IIS 中配置了匿名身份验证的用户身份,以使用对 AX 具有完全权限的特定用户启动,并将 DefaultAppPool 设置为作为本地系统运行,但两者都不起作用。我想我可能需要冒充用户,但我不知道该怎么做。有什么建议么?
作为参考,这是我的代码:
消费服务码-
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
service.asmx 文件中的 MoveDocs() 函数与上面的函数相同,只是在声明中减去了“shared”修饰符。该应用程序有效,Web 服务无效。