如何通过c#应用程序使用UI调用外部Windows应用程序?

时间:2012-04-04 12:25:27

标签: c# web-services dynamic-data-exchange

我们有一个带GUI的程序( A.exe )和一个用一些文本做NLP的工具栏。 在该工具栏中,我们有函数A ,它通过添加一些xml标记来转换文本。 有人在这里(老板)希望我创建一个名为功能A 的Web服务。它告诉了我Dynamic Data Exchange(几年前他用过它),我看到SendMessage之类的东西。

互联网上的某人将使用Web服务:发送文本并将结果作为 xml 。当有人调用WS时,GUI程序无法启动,因为它太慢,所以某人建议一次性启动此 A.exe ,并且WS会询问这个发送DDE电话 A.exe 。我不知道 A.exe 在并发呼叫时会如何反应。

Web服务将:

  1. 将文本文件保存在目录中
  2. 拨打 A.exe
  3. A.exe 将计算文本文件并创建xml文件
  4. WS将循环,直到xml文件存在
  5. WS将获取xml并将其作为流发送给原始调用者
  6. 我想注意:

    1. DDE很旧,似乎需要一个支持DDE服务器的程序。
    2. 由于我是Java开发人员,SendMessage有点不明确。
    3. 我没有尝试命名或匿名管道按照建议进行该通话。
    4. 谢谢。

      PS:构建使用UI调用服务器端程序的WS是一种异端,不是吗?

1 个答案:

答案 0 :(得分:1)

这个问题的答案实际上取决于你想要完成的事情。您的函数是否更改来自外部数据源(如数据库)的数据,或者您是否在应用程序中调用函数?

我将从以下问题开始。

1)按钮的功能是什么?是否可以将其功能转移到服务中并在多个应用程序之间共享?

2)您可以将功能放在DLL中并在两个应用程序之间共享吗?

3)这两个应用程序是否真的需要相互通信?

如果两个进程必须相互通信,并且您只希望应用程序A响应来自应用程序B的消息而行为,请考虑使用命名管道进行TCP / IP通信。这在.NET中非常简单,并提供了进程之间的快速通信。

更新:以下是使用命名管道的信息链接:http://msdn.microsoft.com/en-us/library/bb546085.aspx

更新2:这是您更新问题后的更新。你有权访问A.exe的源代码吗?如果这样做,您有两种选择:1)将该逻辑移动到您的服务中;或2)修改A.exe以接受命令行参数,以便您的服务可以调用该过程并获取结果。如果您没有源代码而且无法从命令行调用A.exe,那么除了您自己在Web服务可以调用的表单中自己编写进程外,没有什么可以做的。

P.S。您不必担心并发调用,因为每个服务器请求都将执行单独的进程。