javascriptとservicereferenceを使用して.net2.0asmxサービスを呼び出しています。テスト環境とローカルでサービスを呼び出すと、すべてが正常に機能します。本番環境では、エラー500が発生します。イベントログにエラーが表示されたり、どこにも表示されたりすることはありません。
Webサービスに直接アクセスすると、json形式のデータを受け取ります。servicereferenceを使用してjavascriptからWebサービスを呼び出すと、エラー500が発生します。
データポイントの数を減らすことができ、データはjavascriptを介して正しく返されるため、これはサイズ制限に関連している可能性があると思います。
httpRuntimeでmaxRequestLengthを増やしてみましたが、影響はありません。私が見逃している設定はありますか?
このページ(http://bit.ly/NXBFpD)を表示すると、データがエラーなしで返されることがわかります。
このページを表示してfirebugで行われている呼び出しを見ると、上記と同じページが呼び出されていることがわかりますが、エラー500が返されます。http://bit.ly/NXBPO1
これは、呼び出されているページのコードビハインドです。
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("/Services/FusionService.asmx"));
}
}
}
これは、サービスを呼び出すjsコードです。
function GetGeometries(sw, ne, metro) {
FusionService.GetGeometries(sw.lat(), sw.lng(), ne.lat(), ne.lng(), metro, drawMap);
}
これはサービスです:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class FusionService : System.Web.Services.WebService
{
private string url = "https://www.googleapis.com/fusiontables/v1/query";
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public string GetGeometries(decimal southWestLat, decimal southWestLng, decimal northEastLat, decimal northEastLng, string metro)
{
try
{
var jss = new JavaScriptSerializer();
string key = string.Format("Geometry-{0}", metro);
var geometryData = HttpContext.Current.Cache[key] as string;
if (!string.IsNullOrEmpty(geometryData))
{
var deserialized = jss.Deserialize<GeometryData>(geometryData);
return jss.Serialize(deserialized);
}
var query = "SELECT name, geometry, FranchiseI, latitude, longitude, STATE FROM " +
"1JNOz_lhP1B8oCzeNLBm8u5k6ezdRDKtM-NBD8 where ST_INTERSECTS(geometry, RECTANGLE(LATLNG("
+ southWestLat + "," + southWestLng + "), LATLNG(" + northEastLat + "," + northEastLng + ")))";
var requestString = url + "?sql=" + HttpUtility.UrlEncode(query) + "&key=AIzaSyCXLd2VlvZ0FNLbgMKsfSq7Uvp3IDwa";
var request = WebRequest.Create(requestString) as HttpWebRequest;
using (var response = request.GetResponse() as HttpWebResponse)
{
var reader = new StreamReader(response.GetResponseStream());
var json = reader.ReadToEnd();
json = json.Replace("NaN", "\"\"");
HttpContext.Current.Cache[key] = json;
var deserialized = jss.Deserialize<GeometryData>(json);
return jss.Serialize(deserialized);
}
}
catch(Exception ex)
{
return ex.Message;
}
}
}