2012-04-05 7 views
1

Ich versuche, einen Asmx-Service von einer HTML-Seite über JavaScript und jQuery aufzurufen. Hier mein Code für den Dienst HelloWorldTest.asmx ist:jQuery Cross-Site-Aufruf an ASMX-Dienst Rückgabewert Null

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class HelloWorldTest : System.Web.Services.WebService 
{ 

    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] 
    public string HelloWorld5() 
    { 
     string connetionString = null; 
     SqlConnection connection; 
     SqlDataAdapter adapter = new SqlDataAdapter(); 
     string sql = null; 
     connetionString = System.Configuration.ConfigurationManager.ConnectionStrings["pollConString"].ToString(); 
     Random _rg = new Random(); 
     connection = new SqlConnection(connetionString); 
     sql = "insert into Country (OID,country_name) values('Servicecalled-" + Convert.ToString(_rg.Next(0, 99999999)).PadLeft(8, '0') + "','"+System.DateTime.Now.ToString() +"')"; 

     connection.Open(); 
     adapter.InsertCommand = new SqlCommand(sql, connection); 
     adapter.InsertCommand.ExecuteNonQuery(); 
     return "Helloworld"; 
    } 
} 

ich den Dienst in einem lokalen Server veröffentlicht haben, die in 192.168.0.124 und Port 80.

Hier ist meine HTML-Seite ausgeführt wird Code für den Client-Aufruf:

$.ajax({ 
    type: 'GET', 
    url: http://192.168.0.124:80/pollservice/Services/HelloWorldTest.asmx/HelloWorld5', 
    processData: true, 
    data: {},    
    dataType: "json; charset=utf-8", 
    responseType: "", 
    success: function (data, textStatus, jqXHR) { 
     processData(data, textStatus, jqXHR); 
    } 
}); 

function processData(data, textStatus, jqXHR) {     
    alert(' data d = ' + data.d); 
} 

Nun ist die Frage:

, wenn ich in den lokalen Host leite ich eine Rückkehr aus dem Dienst bekommen. Es ist eine einfache Zeichenfolge. Aber wenn ich es auf dem Server in einem LAN veröffentliche und ich vom Client-Rechner aus anrufe, bekomme ich Null-Ausgabe.

Aber interessanterweise wird das Protokoll in den Server geschrieben. Also wird die Helloworld5() -Methode von der JavaScript-Methode über $ .ajax (....) aufgerufen. Die JSON-Rückgabedaten sind jedoch im Fall des veröffentlichten Servers leer.

Warum das passiert? Ich betreibe die veröffentlichte Website im integrierten Asp.Net-Modus.

Antwort

0

Dies wegen der Same Origin policy sein könnte, wenn die HTML-und die asmx Dienst in verschiedenen Servern ausgeführt werden. Um crossursprüngliche Ajax-Anfragen zu aktivieren, müssen Sie JSONP oder CORS verwenden.

Um sicherzustellen, dass dies ein Cross-Origin-Problem ist, können Sie die Chrome-Entwicklertools verwenden, in denen Sie die Meldung "Ursprung ist nicht von Access-Control-Allow-Origin erlaubt" erhalten.

Ich hatte ein ähnliches Problem, und ich endete mit JSONP.

0

Sie deklarieren den Rückgabetyp als JSON, geben aber tatsächlich eine nackte Zeichenfolge zurück. Sie wollen wahrscheinlich die JSON-Daten erstellen, bevor es zurückkehrt, z.B .:

// ... 

string responseData = "{ d : \""; 
responseData += "Hello World!"; 
responseData += "\" }"; 

return responseData; 
+0

Danke Eliran. Ich habe Format JSON Zeichenfolge als Ihre Kommentare. Aber immer noch kein Fortschritt. Ich freue mich auf dieses Problem ... – Ashish

Verwandte Themen