簡體   English   中英

從 webform 調用控制台應用程序(WCF 服務)的問題

[英]Problem with calling Console application (WCF Service) from webform

我正在使用 ASP.net 網絡表單應用程序來運行現有的控制台應用程序,該應用程序從數據庫獲取所有記錄並通過第三方 WCF 服務發送它們。 本地一切正常。 當我運行應用程序時,它會打開控制台,獲取記錄並發送它們。 但是現在我將我的文件連同 exe 文件和相關的配置文件一起推送到了測試服務器。 但是當我通過瀏覽器(測試 url)訪問應用程序時,我一次又一次地收到相同的錯誤消息,並且我沒有看到控制台 window。 有時一切正常,但從來沒有連續兩次。

錯誤信息是:

"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 服務有問題,但如果我在測試中雙擊可執行文件,則沒有問題。 可能是什么問題,或者我應該為我的主 webform 應用程序重做控制台應用程序功能嗎?

更新:在 Process.Start(p) 之后添加 Thread.Sleep(3000) 后,我沒有問題。 所以似乎主應用程序沒有等待批處理完成。 如何解決這個問題呢?

似乎在啟動控制台應用程序和 WCF web 服務變得初始化並可以使用之間有短暫的延遲 - 這是意料之中的。

您可以:

  • 使用Thread.Sleep()並可能使用幾個 catch - retry 塊來解決此問題。
  • 您可以讓控制台應用程序在准備好接收請求時向創建過程報告(例如,通過讓它寫入標准 output 並使用重定向流)。

然而,在這一點上,我可能會稍微重新考慮一下架構——開始一個新的過程是相對昂貴的,最重要的是,初始化一個 WCF 服務也相對昂貴。 如果每個請求都執行一次,那么除了上述時間問題之外,您還會招致性能損失。

是否可以稍微更改架構,以便將單個外部進程(例如 Windows 服務)用於所有請求,而不是每次都生成一個新進程?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM