2012-04-05 24 views
1

JavaScriptとjQueryを使用してHTMLページからasmxサービスを呼び出そうとしています。 はここでサービスHelloWorldTest.asmxための私のコードです:私は192.168.0.124で実行されているローカルサーバーでのサービス、およびポートを公開しているjQuery ASMXサービスへのクロスサイトコール戻り値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"; 
    } 
} 

今ここに私のHTMLページですクライアント呼び出しのためのコード:

$.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); 
} 

今問題:

私はサービスから収益を得るローカルホストに実行しています。それは単純な文字列です。しかし、私はそれをLAN上のサーバーに公開していて、クライアントマシンから呼び出すと、ヌル出力を得ています。

しかし、興味深いことに、ログはサーバーに書き込まれます。 Helloworld5()メソッドはJavaScriptメソッドから$ .ajax(....)呼び出しによって呼び出されます。しかし、公開されたサーバーの場合、JSON戻りデータは空です。

これはなぜ起こっているのですか? Asp.Netの統合モードで公開されているWebサイトを実行しています。

答えて

0

htmlとASMXサービスが異なるサーバで実行されている場合、これが理由Same Origin policyのものであってもよい:例えば、それを返す前にJSONデータを構築したいです。 クロスオリジンajax要求を有効にするには、JSONPまたはCORSを使用する必要があります。

これがクロスオリジンの問題であることを確認するには、chrome開発者ツールを使用します。クロスオリジンの問題の場合、「OriginはAccess-Control-Allow-Originによって許可されていません」というメッセージが表示されます。

私は同様の問題があり、JSONPを使用してしまいました。

0

あなたは戻り値の型をJSONとして宣言していますが、実際には裸の文字列を返しています。おそらく

// ... 

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

return responseData; 
+0

Thanks Eliran。私はあなたのコメントとしてJSON文字列をフォーマットしています。しかし、まだ進歩はありません。この問題を楽しみにしています... – Ashish

関連する問題