Перенаправление на веб-страницу из вызова веб-службы - PullRequest
2 голосов
/ 19 января 2010

У меня есть веб-сервис .net, который принимает некоторые данные XML.

В веб-службе я хочу манипулировать данными, а затем вызвать веб-страницу, которая отображает информацию для пользователя. Веб-сервис должен вернуться после охвата веб-страницы.

Мне не повезло.

Я пробовал Server.Transfer (url, end); Который генерирует исключение, так как мое возвращение было уничтожено с передачей: Клиент обнаружил тип содержимого ответа 'text / html; charset = utf-8 ', но ожидаемый' text / xml '.

Я также пробовал Context.Response.Redirect (url, end); которые генерируют исключение 302 (объект перемещен).

Я видел различные описания того, как обрабатывать ошибку 302. Однако я не могу контролировать клиента. В этом случае мой сервис будет вызываться из Java-приложения, поэтому я не могу обернуть вызов на стороне клиента перед вызовом Web-сервиса. Мне нужно сделать это из asmx.

// this is very basic but the general gist
[WebMethod]
public string MyRequest(string someXML)
{
    // process the xml, dump do database, invoke aspx page

    string url = "xxxx.aspx";
    bool end = false;

    Server.Transfer(url, end);
    //this.Context.Response.Redirect(url, end);

    return "<retcode>somecode</retcode>";
}

Я искал примеры этой ситуации или способ асинхронного вызова веб-страницы изнутри службы и возврата. Кто-нибудь может указать мне на этот образец или пример?

Спасибо

Mike

Ответы [ 2 ]

3 голосов
/ 19 января 2010

К сожалению, если у вас нет контроля над клиентским приложением, это невозможно. Подумайте об этом с конца клиентского приложения.

Веб-сервисы (я полагаю, в данном случае SOAP) для удобства используют http, но на самом деле это вызовы данных, а не веб-страницы. Таким образом, клиентское приложение не обязано выполнять перенаправление на веб-сайт, что в действительности является переходом по протоколу. Я предполагаю, что большинство библиотек SOAP следуют за редиректом 302, предполагая, что служба данных, которую они пытаются вызвать, перемещена, поэтому все еще ожидает найти службу данных на новом URI.

Предполагая, что клиент также является своего рода приложением (то есть не javascript, работающий в браузере), он, вероятно, не может даже отобразить веб-страницу, поэтому должен будет запустить браузер.

Если вы не управляете клиентом, но контролируете протокол / интерфейс, вы можете определить тип возврата, при котором клиенты ожидают запуска браузера, но это, в основном, просто просит разработчиков клиента сделать это. что вы не можете напрямую.

0 голосов
/ 19 января 2010

Вы не можете сделать это, потому что клиент ожидает ответ XML (весь смысл веб-службы). Вы не можете заставить клиента сделать что-то совершенно отличное от серверной стороны (то есть открыть совершенно новое приложение, являющееся браузером).
Клиентское приложение необходимо будет изменить.

EDIT:
Если веб-служба возвращает сообщение, отображаемое пользователю, вы можете вернуть что-то вроде «Пожалуйста, перейдите на [URL], чтобы увидеть результаты» и надеяться, что пользователь будет следовать вашим инструкциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...