0
我使用.Net MVC應用程序作爲簡化的Web服務。返回一個HttpWebResponse ASP.Net MVC
我有一個異步方法,我稱之爲:
public void RunQueue()
{
QueueDelegate queue = new QueueDelegate(Queue);
AsyncCallback completedCallback = new AsyncCallback(QueueCompleteCallback);
lock (_sync)
{
if (!queueIsRunning)
{
AsyncOperation async = AsyncOperationManager.CreateOperation(null);
queue.BeginInvoke(QueueCompleteCallback, async);
queueIsRunning = true;
}
}
}
和希望的是,當我叫它,它開始的隊列,然後讓用戶繼續使用他們的日子(他們會當隊列完成時收到一封電子郵件)。
現在看來,一切正常,除了不讓用戶繼續,調用「Web服務」的網頁只是掛起,並且請求最終超時。
如何構建HttpWebResponse並將其發送回其他服務器以便用戶可以繼續?
我試過讓它返回「void」以外的東西,但是這並沒有太大的作用。
下面是調用它的控制器。
public ActionResult StartQueue()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:2394/Home/RunQueue/");
HttpWebResponse response;
string r = "";
try
{
response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
r = reader.ReadToEnd();
}
catch (WebException ex) // A WebException is not fatal. Record the status code.
{
response = (HttpWebResponse)ex.Response;
if (response != null) // timeout
{
r = response.StatusCode.ToString();
}
}
ViewData["message"] = r;
return View();
}
那麼你的控制器/動作是什麼樣子? – 2011-04-19 12:39:40
就目前來看,這是Home控制器的動作中(一旦我得到它會改變,我會增加安全性) 另一方面,我有一個網頁製作一個簡單的GET HttpWebRequest到上面的動作地址,並等待一個我希望能夠發回像「Queue Started」這樣的消息,可以顯示給用戶。 – andrewheins 2011-04-19 12:47:46
請顯示它。 – 2011-04-19 12:48:42