2011-04-01 89 views
0

场景:我打算使用AJAX访问外部Web服务[ExternalWS]。很显然,需要首先创建本地代理服务[LocalProxyWS],然后访问外部Web服务。现在,外部服务webmethod [Process]基本上将我们网站上的当前页面重定向到他们的网站,做一些工作然后返回到我们的网站。启用AJAX的WCF服务功能重定向到新窗口

我想什么:我想,当用户点击该按钮(“过程”)在我们的网站,它应该打开一个新的窗口,然后开始执行新的窗口上的要求,所以我可以有我的网站上的页面将永久显示(它将每隔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> 

基本上,我从单击按钮打开一个新的窗口,然后要处理的新风新要求以便我可以从我的网站上的当前页面向用户显示状态

到目前为止,它会打开新窗口,但不会将请求传输到该窗口,但会收到错误消息萤火虫如下... enter image description here

回答

0

Web服务本身没有任何用户界面,所以你从浏览器的所有Web服务调用将在后台 - 所以我不清楚需要执行服务在新窗口 - 国际海事组织,它根本不需要。

您的错误消息表明您的Web服务InitiateTransaction不会返回正确的数据。该方法的实施是什么。 IMO,它应该调用外部Web服务 - 通过使用服务代理(通过添加服务引用创建,如果它的SOAP服务)或通过使用WebClient/WebRequest(如果它是基于REST的服务)。

+0

其实这个还没有UI。当你点击Process按钮时,它会调用LocalProxy InitiateRequest方法,该方法基本上调用外部webservice InitiateRequest方法。外部的InitiateRequest webmethod首先将页面重定向到它自己的页面,然后在那里进行支付处理。您可以认为它与Paypal完全相同,但在这里,这一切都发生在同一页面上。希望这有助于 – DotNetInfo 2011-04-01 06:24:55

+0

@DotNetInfo,外部web服务如何重定向页面(它可能不会被浏览器调用)?它公开了什么类型的API - 是基于SOAP/XML的API还是HTTP URL? – VinayC 2011-04-01 06:45:14