0

我正在编写一个程序,将文档从一个应用程序移动到 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 服务无效。

4

1 回答 1

0

ProcessStartInfo 具有用户名、密码和域的属性。MSDN 上有更多信息 - http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.password.aspx

于 2013-10-08T22:20:15.387 回答