В контроллере:
Код: Выделить всё
session.ExecuteCommand(this, doc, (response) =>
{
CmdGetNextGlogResponse cmd_resp = new CmdGetNextGlogResponse();
switch (cmd_resp.ParseResult(response.Xml))
{
case CommandExeResult.OK:
cmd_resp.Parse(response.Xml);
break;
default:
Result = "Failed!";
break;
}
},
(ex) =>
{
Result = ex.Message;
});
Код: Выделить всё
public void ExecuteCommand(System.Web.UI.Page page, XmlDocument request, DeviceResponseHandler responseHandler, ExceptionHandler responseExceptionHandler)
{
page.RegisterAsyncTask(new System.Web.UI.PageAsyncTask(
(sender, e, cb, extraData) => BeginCommand(request,cb, extraData),
(ar) => {
try
{
using (var resp = new DeviceResponse(this, ar)) responseHandler(resp);
}
catch (Exception ex)
{
responseExceptionHandler(ex);
}
},
null,//(ar) => CancelCommand(ar, new TimeoutException()),
null));
}
public IAsyncResult BeginCommand(XmlDocument message, AsyncCallback cb, object extra)
{
return BeginCommand(message, cb, extra, 5000);////Timeout.Infinite);
}
public IAsyncResult BeginCommand(XmlDocument message, AsyncCallback cb, object extra, int millisecondsTimeout)
{
Async ar = new Async(cb, extra);
if (millisecondsTimeout != Timeout.Infinite)
ar.timeout_timer = new Timer(ar.on_timeout, this, millisecondsTimeout, Timeout.Infinite);
CommandRequest request;
request.message = message;
request.ar = ar;
lock (_state)
{
ar.message_id = 1;// _nextTransactionId;
///_nextTransactionId = (_nextTransactionId + 1) & MsgId_SequenceMask;
_nextTransactionId = _nextTransactionId + 1;
// Add command to wait-response queue.
_commandsWaitingForResponses.Add(request.ar.message_id, request);
}
bool succeeded = false;
try
{
this.Send(message.OuterXml);
succeeded = true;
return ar;
}
finally
{
if (!succeeded)
{
lock (_state)
{
// Remove the command from wait-polling queue.
// _commandsWaitingForResponses.Remove(request.ar.message_id);
}
lock (ar.monitor)
{
if (ar.timeout_timer != null)
{
ar.timeout_timer.Dispose();
ar.timeout_timer = null;
}
}
}
}
}
Ошибка CS1503 Аргумент 1: невозможно преобразовать из «WebApplication2.Controllers.DevicesController» в « System.Web.UI.Page'
Я попробовал BuildManager.CreateInstanceFromVirtualPath("~/Default.aspx", typeof(Page)) как страницу для замены 'this', он входит в метод, но выдает некоторую ошибку
Asp page,cache,codebehind,contenttype выдает исключение
Невозможно войти в метод IAsyncResult BeginCommand.
Вышеуказанное отлично работает в приложении веб-формы asp.net, но в mvc, который мы пытаемся, не работает нормально.
В веб-формах Asp приведенный выше код работает нормально, входит в метод Async и возвращает данные как идеальные. В MVC нам нужна замена «это» или любое другое лучшее решение.
Я пробовал искать похожие темы, менять «это» на «Страница» и т. д. — безуспешно. Любая помощь будет оценена по достоинству.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -page-when