从webform调用控制台应用程序(WCF服务)时出现问题

本文关键字:问题 服务 WCF 调用 webform 控制台 应用程序 | 更新日期: 2023-09-27 17:53:16

我正在使用ASP.net webform应用程序来运行一个现有的控制台应用程序,该应用程序从DB获取所有记录,并通过第三方WCF服务发送它们。本地一切都很好。当我运行应用程序时,它打开控制台,获取记录并发送它们。但是现在我把我的文件连同exe文件和相关的配置文件一起推到了测试服务器上。但是,当我通过浏览器(测试url)访问应用程序时,我一次又一次地得到相同的错误消息,而且我看不到控制台窗口。有时一切都很好,但从来没有连续两次。

错误信息是:

"There was no end point listening at '.....svc' that could accept message. This is often caused by incorrect address or soap action. 
System.net.webexception. Remote name could not be resolved 
at System.Net.HttpWebRequest.GetRequestStream 
at System.ServiceModel.Channels.HttpOutput.Webrequest.HttpOutput.GetOutputStream()
我在webform中调用控制台应用程序的代码是:
ProcessStartInfo p = new ProcessStartInfo();
p.Arguments = _updateNow.ToString();
p.FileName="something";
p.UseShellExecute = false;// tried true too without luck
Process.Start(p);

错误信息表示"没有终点",听起来像WCF服务有问题,但如果我在测试中双击可执行文件,则没有问题。什么可能是可能的问题,或者我应该重做控制台应用程序的功能,我的主要网页应用程序?

更新:在Process.Start(p)之后添加Thread.Sleep(3000)后,我没有问题。因此,主应用程序似乎没有等待批处理过程完成。如何解决这个问题?

从webform调用控制台应用程序(WCF服务)时出现问题

在启动控制台应用程序和WCF web服务初始化并可用之间似乎有一个短暂的延迟-这是预期的。

你可以:

  • 使用Thread.Sleep()和可能的几个catch - retry块解决问题。
  • 您可以让控制台应用程序在准备好接收请求时向创建进程报告(例如,通过将其写入标准输出并使用重定向流)。

然而,在这一点上,我可能会稍微重新考虑架构——启动一个新进程是相对昂贵的,最重要的是初始化一个WCF服务也是相对昂贵的。如果每个请求只做一次,那么除了上述时间问题之外,您还会招致性能损失。

是否有可能稍微改变架构,以便单个外部进程(例如Windows服务)用于所有请求,而不是每次生成一个新进程?