Estoy tratando de llamar a un servicio web (.asmx) desde una aplicación C#, en formato json.El servicio web se niega a recibir parámetros y responde en JSON
Cuando especifico el método de solicitud como GET, y no especifico contentType.
(req es HttpWebRequest)
req.Method = "GET";
Todo funciona bien, pero me da la respuesta XML.
cuando especifico Tipo de contenido:
req.ContentType = "application/json; charset=utf-8";
me sale error interno del servidor
500.
Cuando cambio método de la petición:
req.Method = "POST";
que sólo puede llamar a los métodos sin parámetros, que devuelve correctamente JSON, pero si trato de llamar a un método con parámetros, me sale error 500 de nuevo.
El código de servicio Web:
[WebMethod(EnableSession =true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string SimplestWebService()
{
return "hello";
}
Y con parámetros:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Echo(string aString)
{
return aString;
}
será muy apreciada Cualquier idea.
Agregado: Quizás no estoy escribiendo la solicitud POST correcta (ahora lo estoy enviando en el encabezado, al igual que una solicitud GET). ¿Puede alguien por favor guiarme en eso?
Modo de creación: El sitio web es, en efecto marcado como script:
[ScriptService]
public class MyAPI : System.Web.Services.WebService
Y aquí es cómo construir mi solicitud POST (realmente tienden a creer que es el problema):
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(methodUrl.ToString());
req.Method = "POST";
req.Headers.Add("aString","oren");
req.ContentLength = 0;
...
req.ContentType = "application/json; charset=utf-8";
req.Accept = "application/json; charset=utf-8";
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
StreamReader sr = new StreamReader(res.GetResponseStream());
result.Append(sr.ReadToEnd());
}
...
también probamos:
req.Method = "POST";
string postData = "aString=kjkjk";
req.ContentType = @"application/json; charset=utf-8";
req.Accept = @"application/json; charset=utf-8";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(postData);
req.ContentLength = byte1.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
dos últimas notas:
1. Este servicio web funciona en XML utilizando el navegador.
2. Al pedir json, el código nunca alcanza un punto de interrupción en el servicio web. Entonces este es posiblemente un problema de IIS (estoy usando IIS 6.1). Probé la recomendación de tipo MIME here.
Muchas gracias.
¿Puede incluir el código donde configura la solicitud saliente? Específicamente, ¿cómo está agregando el parámetro "aString"? Eso podría ayudar a resolver el problema. – mikemanne
Además, ¿la clase ASMX está etiquetada como: [ScriptService]? Creo (no 100% seguro) que es necesario para acceder al servicio web usando solicitudes de modo POST y datos con formato JSON. – mikemanne
@mikemanne: Muchas gracias por la entrada. Actualizado. –