AJAX включил функцию службы WCF для перенаправления в новое окно - PullRequest
0 голосов
/ 01 апреля 2011

Сценарий : я собираюсь получить доступ к внешнему веб-сервису [ExternalWS] с помощью AJAX. Очевидно, что сначала нужно создать локальный прокси-сервис [LocalProxyWS], который, в свою очередь, получит доступ к внешнему веб-сервису. Теперь внешний веб-метод [Process] в основном перенаправляет текущую страницу нашего сайта на свой сайт, выполняет некоторую работу и затем возвращается на наш сайт.

Что я хочу : я хочу, чтобы, когда пользователь нажимает кнопку («Обработка») на нашем сайте, он открывал новое окно и затем начинал выполнение запроса в новом окне, чтобы У меня может быть постоянное отображение страницы на моем веб-сайте (которая каждые 15 секунд будет запрашивать у внешней службы (через локальный прокси-сервер) статус).

Надеюсь, я ясно объясню.

Ниже приведен мой код, пожалуйста, не стесняйтесь комментировать, если есть какой-либо другой способ, который является эффективной альтернативой.

Служба локального прокси, которая вызывает внешнюю службу, выглядит следующим образом.

    [ServiceContract(Namespace = "LocalProxy")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class LocalProxyToExternalService
{
    [OperationContract]
    public void InitiateTransaction(string amount)
    {
        //NOTE: Basically want to call the external service from here in 
                a new window.....
        //HttpContext.Current.Response.Redirect("www.google.com", false);
    }
}

Код моей страницы выглядит следующим образом ...

        function PayWithXYZ() {

         var newWindow = window.open('', '_blank', 'width=500,height=500', false);
         newWindow.focus();

        var service = new LocalProxy.LocalProxyToExternalService();
        service.InitiateTransaction($('input[id*=TextBox1]').val());   //, OnPayWithXYZCompleted, OnPayWithXYZError);
    }

    function OnPayWithXYZCompleted(result) {
        $('span[id*=Label1]').text(result);            
    }

    function OnPayWithXYZError(result) {
        alert(result.get_message());
    }

</script>


<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="~/Services/LocalProxyToExternalService.svc" />
    </Services>
</asp:ScriptManager>   


<div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Pay with XYZ" OnClick="Button1_Click" />
    <input id="Button2" type="button" value="Client Button" onclick="PayWithXYZ();" />
</div>
<asp:Label ID="Label1" runat="server" ForeColor="Red" Text="Label"></asp:Label>

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

Пока что он открывает новое окно, но не передает запрос на это, но я получаю сообщение об ошибке в firebug следующим образом ... enter image description here

1 Ответ

0 голосов
/ 01 апреля 2011

Веб-сервисы как таковые не имеют никакого пользовательского интерфейса, и поэтому все ваши вызовы веб-сервисов из браузера будут фоновыми, поэтому мне не ясно, нужно ли запускать сервис в новом окне - IMO, его просто не нужно,

Ваше сообщение об ошибке указывает на то, что ваша веб-служба InitiateTransaction не возвращает правильные данные.Какова реализация этого метода.IMO, он должен вызывать внешнюю веб-службу - либо с помощью служебного прокси-сервера (созданного с помощью Добавить ссылку на службу, если его служба SOAP), либо с помощью WebClient / WebRequest (если это служба на основе REST).

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