Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 支持AJAX的WCF服务功能,可重定向到新窗口_Javascript_Asp.net_Ajax_Wcf - Fatal编程技术网

Javascript 支持AJAX的WCF服务功能,可重定向到新窗口

Javascript 支持AJAX的WCF服务功能,可重定向到新窗口,javascript,asp.net,ajax,wcf,Javascript,Asp.net,Ajax,Wcf,场景:我将使用AJAX访问外部web服务[ExternalWS]。因此,显然,需要首先创建本地代理服务[LocalProxyWS],后者将访问外部web服务。现在,外部服务webmethod[Process]基本上将我们站点上的当前页面重定向到他们的站点,做一些工作,然后返回到我们的站点 我想要什么:我希望当用户单击我们网站上的按钮(“流程”)时,它会打开一个新窗口,然后开始在新窗口上执行请求,这样我就可以永久显示我网站上的页面(该页面将每隔15秒向外部服务轮询一次请求(通过本地代理)对于状态)

场景:我将使用AJAX访问外部web服务[ExternalWS]。因此,显然,需要首先创建本地代理服务[LocalProxyWS],后者将访问外部web服务。现在,外部服务webmethod[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>
函数PayWithXYZ(){
var newWindow=window.open(“”,(u blank“,”宽度=500,高度=500',false);
newWindow.focus();
var service=new LocalProxy.LocalProxyToExternalService();
service.InitiateTransaction($('input[id*=TextBox1]').val();/,OnPayWithXYZCompleted,OnPayWithXYZError);
}
函数onPayWithXYZ已完成(结果){
$('span[id*=Label1]')。文本(结果);
}
函数onPayWithXYZEROR(结果){
警报(result.get_message());
}
基本上,我通过单击按钮打开一个新窗口,然后希望在该新窗口中处理新请求,这样我就可以从我网站的当前页面向用户显示状态

到目前为止,它打开了新窗口,但没有将请求转移到该窗口,但我在firebug中收到一条错误消息,如下所示。。。
这样的Web服务没有任何UI,所以所有来自浏览器的Web服务调用都将处于后台-所以我不清楚是否需要在新窗口中执行服务-IMO,它根本不需要


错误消息表明web服务InitiateTransaction未返回正确的数据。该方法的实现是什么。在我看来,它应该调用一个外部web服务——或者通过使用服务代理(如果是SOAP服务,则通过添加服务引用创建),或者通过使用WebClient/WebRequest(如果是基于REST的服务)。

实际上,这个还没有UI。当您单击Process按钮时,它将调用LocalProxy InitiateRequest方法,该方法基本上调用外部webservice InitiateRequest方法。外部InitiateRequestWebMethod首先将页面重定向到它自己的页面,然后在那里进行支付处理。你可以认为它与Paypal完全相同,但在这里,这一切都发生在同一页上。希望如此helps@DotNetInfo,外部web服务如何重定向页面(可能未从浏览器调用它)?它公开了什么样的API?是基于SOAP/XML的API还是HTTP URL?