2011-04-01 6 views
0

시나리오 : AJAX를 사용하여 외부 웹 서비스 [ExternalWS]에 액세스하려고합니다. 그래서 분명히 로컬 프록시 서비스 [LocalProxyWS]를 만들어야합니다. 그러면 로컬 웹 서비스에 액세스하게됩니다. 이제 외부 서비스 webmethod [프로세스]는 기본적으로 사이트의 현재 페이지를 사이트로 리디렉션하고 일부 작업을 수행 한 다음 다시 사이트로 돌아옵니다.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

웹 서비스에는 UI가 없으므로 브라우저의 모든 웹 서비스 호출이 백그라운드에서 실행됩니다. 따라서 서비스를 실행할 필요가 있는지 명확하지 않습니다. 새로운 창 - IMO, 단순히 필요하지 않습니다.

오류 메시지는 웹 서비스 InitiateTransaction이 올바른 데이터를 반환하지 않는다는 것을 나타냅니다. 그 방법의 구현은 무엇입니까. IMO, 서비스 프록시 (SOAP 서비스 인 경우 서비스 참조 추가로 작성)를 사용하거나 WebClient/WebRequest (REST 기반 서비스 인 경우)를 사용하여 외부 웹 서비스를 호출해야합니다.

+0

사실,이 UI에는 종류가 없습니다. 처리 버튼을 클릭하면 기본적으로 외부 웹 서비스 InitiateRequest 메소드를 호출하는 LocalProxy InitiateRequest 메소드가 호출됩니다. 외부 InitiateRequest 웹 메소드는 먼저 페이지를 자신의 페이지로 리디렉션 한 다음 거기에서 지불 처리를 수행합니다. 당신은 Paypal과 동일하다고 생각할 수 있지만 여기에서는 모두 동일한 페이지에서 발생합니다. 이게 도움이 되었으면 좋겠다. – DotNetInfo

+0

@DotNetInfo, 어떻게 외부 웹 서비스가 페이지를 리디렉션 할 수 있습니까? (브라우저에서 호출되지 않을 수 있습니다)? API의 종류 - SOAP/XML 기반 API 또는 HTTP URL입니까? – VinayC

관련 문제