2010-11-03 47 views
5

Tôi đang cố gắng để thực hiện một số cuộc gọi đến một WebServiceTại sao chức năng CallBack của tôi không hoạt động?

tôi đã làm chính xác những gì được mô tả trong bài viết này

http://viralsarvaiya.wordpress.com/2010/03/23/calling-web-service-from-java-script-in-asp-net-c/

Nhìn vào giao diện điều khiển của con đom đóm tôi có thể thấy rằng chức năng của tôi đã được thực hiện và trả về dữ liệu dự kiến, nhưng chức năng gọi lại của tôi (OnComplete, OnError, OnTimeOut) không bao giờ được thực hiện.

Có gì không ổn?

Đây là mã (cùng một mã của bài viết) Service.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 

[WebService(Namespace = "http://Localhost...xys/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService] 

[System.Web.Script.Services.ScriptService()] 

public class Service : System.Web.Services.WebService 
{ 
    public Service() { 

    //Uncomment the following line if using designed components 
    //InitializeComponent(); 
    } 

    [WebMethod] 
    public string HelloWorld(string strNoOfData) 
    { 
     return strNoOfData; 
    } 
} 

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script type="text/javascript" language="javascript"> 
function CallService() { 
    Service.HelloWorld(document.getElementById('Textbox1').value, 
     OnComplete, OnError, OnTimeOut); 
} 

function OnComplete(Text) { 
    alert(Text); 
} 

function OnTimeOut(arg) { 
    alert("timeOut has occured"); 
} 

function OnError(arg) { 
    alert("error has occured: " + arg._message); 
} 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    <Services> 
     <asp:ServiceReference Path="~/Service.asmx" /> 
    </Services> 
</asp:ScriptManager> 

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
<ContentTemplate> 
<fieldset> 
<asp:TextBox ID="Textbox1" runat="server"></asp:TextBox> 
<br /> 
<asp:Button ID="Button1" runat="server" Text="Call Service" OnClientClick="CallService()" /> 
</fieldset> 
</ContentTemplate> 
</asp:UpdatePanel> 
</div> 
</form> 
</body> 
</html> 
+0

bạn có thể vui lòng đăng mã của bạn ở đây không? có thể giúp gỡ lỗi vấn đề. –

+0

mã là CHÍNH XÁC mã của bài viết – Ewerton

+0

Tôi đã sử dụng mã chính xác, gọi lại được gọi là như mong đợi. Điều duy nhất tôi nhận thấy là bạn đang đi qua 'OnTimeOut' thay cho tham số' userContext', thử thêm 'InlineScript =" true "' vào tham chiếu dịch vụ của bạn rồi xem nguồn và kiểm tra kịch bản lệnh dịch vụ đã tạo. –

Trả lời

1

Vấn đề là loại dự án, nó hoạt động trong WebApplication, không phải trong WebSites

+1

Rất vui khi bạn phát hiện ra. Ngoài ra, bạn nên di chuyển ra khỏi dịch vụ ASMX và bắt đầu sử dụng WCF. –

1

Im một chàng trai VB chủ yếu là để ....

Hãy thử một tại một thời điểm theo thứ tự.

Trước tiên, nếu bạn thực sự chọn hộp văn bản, tôi nghi ngờ điều đó. Đặt ClientIDMode là tĩnh.

Second thử [WebMethod(), ScriptMethod(ResponseFormat:=ResponseFormat.Json)]

thứ ba thực hiện phương pháp tĩnh .. oops ảo và lớp cũng có.

Các vấn đề liên quan