मेरे समस्या मुद्दा जाना जाता है और here और here चर्चा की है। लेकिन सुझाए गए समाधानों को पढ़ने और कार्यान्वित करने के बाद भी मैं यह काम करने में असमर्थ हूं।क्रॉस डोमेन कॉल
समस्या: एक्सएमएल लौटने वेब सेवा json के insted:
दूरस्थ सर्वर (IIS 7.0, .नेट 4):
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">"Now i am getting jsop string""2nd param"</string>
अब वर्गों में कोड को तोड़ने की सुविधा देता है:
web.config:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<modules>
<add name="JsonHttpModule.JsonHttpModule" type="JsonHttpModule"/>
</modules>
</system.webServer>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="102400"/>
</webServices>
</scripting>
</system.web.extensions>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>
वेब सेवा:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using JsonHttpModule;
/// <summary>
/// Summary description for JSONP_EndPoint
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[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]
public class MyService : System.Web.Services.WebService {
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public string Sum(string x, string y)
{
return x + y;
}
}
HttpModule वर्ग:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Text;
/// <summary>
/// Summary description for ContentTypeHttpModule
/// </summary>
namespace JsonHttpModule
{
public class JsonHttpModule : IHttpModule
{
private const string JSON_CONTENT_TYPE = "application/json; charset=utf-8";
public void Dispose()
{
}
public void Init(HttpApplication app)
{
app.BeginRequest += OnBeginRequest;
app.EndRequest += new EventHandler(OnEndRequest);
}
public void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Request;
//Make sure we only apply to our Web Service
if (request.Url.AbsolutePath.ToLower().Contains("MyService.asmx"))
{
if (string.IsNullOrEmpty(app.Context.Request.ContentType))
{
app.Context.Request.ContentType = JSON_CONTENT_TYPE;
}
app.Context.Response.Write(app.Context.Request.Params["callback"] + "(");
}
}
void OnEndRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Request;
if (request.Url.AbsolutePath.ToLower().Contains("MyService.asmx"))
{
app.Context.Response.Write(")");
}
}
}
}
ग्राहक के पक्ष (स्थानीय होस्ट):
<script>
$(function() {
$('#btn_test').click(function() {
$.ajax({ url: "http://tonofweb.com/MyService.asmx/Sum",
data: { x: JSON.stringify("Now i am getting jsop string"), y: JSON.stringify("2nd param") },
dataType: "jsonp",
success: function (json) {
alert(json.d);
},
error: function() {
alert("Hit error fn!");
}
});
});
});
</script>
<input id="btn_test" type="button" value="POST" />
तो मैं यहां क्या गलत कर रहा हूं? आप इसे स्वयं परीक्षण कर सकते हैं यह एक लाइव वेब सेवा है। आपकी मदद के लिए धन्यवाद।
jsonp से बदल रहा है क्रॉस डोमेन मुद्दा की वजह से काम नहीं कर रहा है और अभी भी अभी भी आपत्ति लौट एक्सएमएल –