我正在编写一个程序,在ApplicationXtender(AX)中将文档从一个应用程序移动到另一个应用程序。 AX全功能客户端已经有了一个可以处理任务的程序(迁移向导),因此我创建了一个使用Process.Start()启动它并提供自动化所需参数的函数。当我从控制台应用程序或Windows窗体应用程序调用该函数时,迁移向导工作正常。但是该过程必须由基于Web的工作流项目中的事件启动,因此我编写了一个包含相同功能的Web服务,然后在工作流中使用调用Web服务控件来启动它。当我从Web服务使用该功能时,该过程无法完成。我可以看到它挂在任务管理器中。我很确定它与IIS中的用户设置有关,但我对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服务没有。
答案 0 :(得分:0)
ProcessStartInfo具有用户名,密码和域的属性。有关MSDN的更多信息 - http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.password.aspx