есть проблема.WebClient UploadString
Хотя пост-обработки с помощью веб-сервиса я получаю сообщение об ошибке
iqws webservis = new iqws();
WebClient wc = new WebClient();
var ser = new JavaScriptSerializer();
var serializedResult = ser.Serialize(webservis.getProducts());
wc.Headers[HttpRequestHeader.ContentType] = "application/json";
string result = wc.UploadString("http://localhost:3523/WS/iqws.asmx/getProducts", serializedResult);
var table = ser.Deserialize<Dictionary<string, dynamic>>(result);
Но есть ошибка: Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.
Почему?
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class iqws : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getProducts()
{
List<products> prd= new List<products>();
SqlConnection cn = new SqlConnection(ado.cnStr);
SqlCommand cmd = new SqlCommand("SELECT * FROM products", cn);
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
products p = new products();
p.name = dr["name"].ToString();
p.money = dr["money"].ToString();
prd.Add(p);
}
var jsonSerialiser = new JavaScriptSerializer();
return jsonSerialiser.Serialize(prd);
}
}
И не оставлять JSON не проблема ..
$.ajax({
type: "POST",
url: "/WS/iqws.asmx/getProducts",
contentType: "application/json; charset=utf-8",
//data: {},
dataType: "json",
success: function (data) {
$("#jsonvalue").html(data.d);
},
error: function (xhr, status, error) {
$("#jsonvalue").html(xhr.responseText);
}
});
И результат;
[
{
"name": "iPhone 4s Gold",
"code": null,
"money": "1899,0000",
"images": null,
"comments": null
},
{
"name": "iPhone 5s Black",
"code": null,
"money": "2000,0000",
"images": null,
"comments": null
}
]
Почему я получаю ошибку?
Почему вы пытаетесь загрузить продукты в 'getProducts()'? Сначала вы получаете продукты непосредственно из кода, вызывая 'webservis.getProducts()', затем вы пытаетесь загрузить эту коллекцию продуктов в метод 'getProducts()', вызвав 'wc.UploadString (...)' с помощью URL. Если вы хотите загружать продукты с помощью POST, вам нужен еще один метод 'addProducts (products [] p)', который будет принимать массив 'products' в качестве параметра. Если вы хотите загрузить список продуктов, используйте GET, используя что-то вроде 'wc.DownloadString (...)'. – nekno