Error 405 al crear servicio

29 views
Skip to first unread message

mjsolu

unread,
Oct 2, 2009, 4:55:23 AM10/2/09
to api-11870
Buenas,

Estoy tratando de crear un servicio en 11870 con ASP .Net, he
conseguido autentificarme (al principio recibia un error de
autorización), y ahora intento subir el XML con la información
obligatoria del servicio: no consigo nada excepto un error 405: Método
no permitido.

Probablemente el problema está en el XML que estoy enviando, pero no
he encontrado una documentación donde aparezca algun ejemplo.

Este es el codigo que empleo en C#:

string uri = "http://11870.com/api/v1";
req = System.Net.WebRequest.Create(uri);

//[...] Aqui se crean campos necesarios como nonce, etc...

string digest = Convert.ToBase64String(sha1.ComputeHash
(StrToByteArray(nonce + createtime + AuthToken)));

//añado las cabeceras X-WSSE a HTTPWebRequest
req.Headers.Add("Authorization", "WSSE realm=\"11870.com
\", profile=\"UsernameToken\"");
req.Headers.Add("X-WSSE", string.Join("", new string[]
{ "UsernameToken ", "Username=\"", "mga...@solusoft.es", "\", ",
"PasswordDigest=\"", digest, "\", ", "Nonce=
\"", nonce, "\", ", "Created=\"", createtime, "\"" }));

req.Method = "POST";
req.ContentType = "application/atom+xml";
// Wrap the request stream with a text-based writer
System.IO.StreamWriter writer = new System.IO.StreamWriter
(req.GetRequestStream());
//Escribimos el XML en el stream

writer.WriteLine(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:oos='http://11870.com/api/oos'>" +
"<title>Prueba de Servicio</title> " +
"<oos:useraddress>usuario Prueba</oos:useraddress> " +
"<oos:locality slug='/es/los-llanos-de-aridane'>Localidad
de Prueba</ oos:locality> " +
"<oos:country slug='/es'>España</oos:country> " +
"</entry> ");

writer.Close();
rsp = req.GetResponse();


Y obviamente, es al llamar al método GetResponse() cuando obtengo el
error 405.


Si me podeis echar una manita con el XML necesario, os estaria muy
agradecidos.

Luis Peralta

unread,
Oct 29, 2009, 3:41:53 PM10/29/09
to api-11870
Hola,

Tiene pinta de que no estás enviando un documento Atom bien
formado. Hay atributos según el estándar que son obligatorios, como
'id' o 'content' que, a raíz de ver el ejemplo de código, creo que no
estás enviando.

Un saludo,


On Oct 2, 9:55 am, mjsolu <finde...@gmail.com> wrote:
> Buenas,
>
> Estoy tratando de crear un servicio en 11870 con ASP .Net, he
> conseguido autentificarme (al principio recibia un error de
> autorización), y ahora intento subir el XML con la información
> obligatoria del servicio: no consigo nada excepto un error 405: Método
> no permitido.
>
> Probablemente el problema está en el XML que estoy enviando, pero no
> he encontrado una documentación donde aparezca algun ejemplo.
>
> Este es el codigo que empleo en C#:
>
>             string uri = "http://11870.com/api/v1";
>             req = System.Net.WebRequest.Create(uri);
>
>             //[...] Aqui se crean campos necesarios como nonce, etc...
>
>             string digest = Convert.ToBase64String(sha1.ComputeHash
> (StrToByteArray(nonce + createtime + AuthToken)));
>
>             //añado las cabeceras X-WSSE a HTTPWebRequest
>             req.Headers.Add("Authorization", "WSSE realm=\"11870.com
> \", profile=\"UsernameToken\"");
>             req.Headers.Add("X-WSSE", string.Join("", new string[]
> { "UsernameToken ", "Username=\"", "mgar...@solusoft.es", "\", ",

mjsolu

unread,
Nov 6, 2009, 7:06:52 AM11/6/09
to api-11870
Buenas, y ante todos, muchas gracias por responder.

Mi problema persiste.

Luis, respecto a su respuesta: la documentación dice,

Creating a place

Normal AtomPub considerations apply.

The following attributes MUST appear on the Atom entry being created:
oos:useraddress
oos:locality
oos:country
atom:title

The following attributes MAY appear:
oos:id

Por lo que interpreté mal la obligatoriedad del campo id del estándar,
gracias por la aclaración.
No obstante, un colaborador me respondió por mensaje privado y me pasó
un xml válido (gracias) por lo que ya los estaba incluyendo sin exito.

Empecé a pensar que podria estar enviando el xml con una codificacion
distinta a UTF-8, pero no es asi.

Este es la parte del código que he cambiado (el XML).

...
string documentoXml =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:oos='http://11870.com/api/oos'>" +
"id>http://11870.com/pro/prueba-de-servicio-mjgs-02</id>"
+
"<title>Prueba de Servicio 2</title>" +
"<updated>" + createtime + "</updated>" +
"<author><name>nickusuario</name></author>" +
"<content type=\"text\">Comentario servicio 2...</
content>" +
"<oos:locality slug='/es/los-llanos-de-aridane'>Localidad
de Prueba</oos:locality>" +
"<oos:country slug='/es'>España</oos:country>" +
"<oos:useraddress>usuario Prueba</oos:useraddress>" +
"</entry>";

System.IO.StreamWriter writer = new System.IO.StreamWriter
(req.GetRequestStream(), System.Text.Encoding.UTF8);

writer.WriteLine(documentoXml);
writer.Close();

rsp = req.GetResponse();




¿Alguien tiene idea de porqué sigue fallando? Por mas pruebas que hago
y que investigo no saco nada en claro, aparte de que la Autorización
WSSE la estoy haciendo bien, y que quiza me este fallando al hacer
POST. Nota: recibo el mismo error 405 si envio un xml vacio, por lo
que el problema sigue estando ahi, pero no lo veo.

Muchas gracias a todos por cualquier ayuda que puedan prestarme.

Luis Peralta

unread,
Nov 6, 2009, 7:09:36 AM11/6/09
to api-11870


On Nov 6, 1:06 pm, mjsolu <finde...@gmail.com> wrote:
>
> Por lo que interpreté mal la obligatoriedad del campo id del estándar,
> gracias por la aclaración.

Eso es.

> Este es la parte del código que he cambiado (el XML).
>
>             ...
>             string documentoXml =
>                 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
>             "<entry xmlns='http://www.w3.org/2005/Atom'
> xmlns:oos='http://11870.com/api/oos'>" +
>             "id>http://11870.com/pro/prueba-de-servicio-mjgs-02</id>"


Si has copiado y pegado correctamente, a la etiqueta 'id' le falta el
'<'. ¿Puedes comprobarlo?

Un saludo,

mjsolu

unread,
Nov 10, 2009, 8:55:45 AM11/10/09
to api-11870
Tienes razon, en el codigo que he pegado falta el '<' pero se trata de
una errata al pegarlo aqui (borre un comentario que tenia delante y
supongo que desgraciadamente se me fue la mano).

En mi codigo está correctamente la etiqueta '<id>' cuando da el error
405.
Reply all
Reply to author
Forward
0 new messages