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

时间:2011-04-28 01:37:50

标签: c# asp.net

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

错误消息是:

"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服务有问题,但如果我双击Test中的可执行文件就没有问题。可能是什么问题或者我应该将控制台应用程序功能重做到我的主要webform应用程序?

更新:在Process.Start(p)之后添加Thread.Sleep(3000)后,我没有问题。所以看起来主应用程序并不是在等待批处理完成。如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

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

你可以:

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

然而,在这一点上,我可能会稍微重新考虑一下这个架构 - 开始一个新的过程相对来说成本很高,并且除了初始化WCF服务之外也是相对昂贵的。如果按照要求进行一次,那么以及上述时间问题也会导致性能损失。

是否无法稍微更改架构,以便对所有请求使用单个外部进程(例如Windows服务),而不是每次都生成新进程?