2011-02-01 12 views
5

Estoy trabajando en una aplicación WP7. Si ocurre un error, quiero volver a registrar el error en mi servidor. Para manejar esto, he creado una operación de servicio WCF. Quiero que esta operación sea RESTANTE para que pueda usarla más adelante con las aplicaciones de iPhone y Android. Debido a que estoy escribiendo información en la base de datos, pensé que el método POST sería lo mejor. Por esta razón, estoy usando WebInvoke. Para hacer esto, estoy usando el siguiente código:Datos de POST al Servicio WCF de WP7

[OperationContract] 
[WebInvoke(UriTemplate = "/LogError/{message}/{stackTrace}", ResponseFormat = WebMessageFormat.Json)] 
public void LogError(string message, string stackTrace) 
{ 
    // Write info to the database 
} 

Desde mi aplicación WP7, quiero llamar a este operaiton a través de un cliente Web. Mi pregunta es, ¿cómo hago eso? No entiendo cómo llamar a la operación LogError y transmitir los datos requeridos a través del WebClient.

¡Gracias por tu ayuda!

+0

Una cosa que agregaría es tener cuidado con el uso de la conexión 3G de los usuarios para publicar información analítica como esta. Si es posible intente guardar en caché la información del error y solo envíela cuando tenga una conexión WiFi o ethernet. Puede usar NetworkInterface.NetworkInterfaceType para determinar qué tipo de conexión tiene (aunque tenga cuidado porque acceder a esta propiedad es una llamada de bloqueo). – 1adam12

Respuesta

1

Algo a lo largo de las líneas:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://serveraddress/LogError/{message}/{stackTrace}"); 

Si usted quiere enviar información adicional más adelante, puede hacerlo con:

request.Method = "POST"; 
request.BeginGetRequestStream(new AsyncCallback(ExecuteAction), request); 

Y tener una devolución de llamada:

void ExecuteAction(IAsyncResult result) 
{ 
    HttpWebRequest request = (HttpWebRequest)result.AsyncState; 
    using (Stream s = request.EndGetRequestStream(result)) 
    { 
     s.Write(data, 0, data.Length); 
    } 
} 

Si hay una respuesta específica de la cadena de servicio, que también podría incluir los datos en el cliente Web y el uso de DownloadStringAsync para obtener los datos de respuesta.

1

Para empezar, encontré un sitio web que debería ayudarle a comenzar a llamar al servicio de WP7.

Trate this y me dejó saber lo que piensa

+0

Gracias por proporcionar el enlace. Desafortunadamente eso no era realmente lo que estaba buscando. Simplemente parece que debería haber una manera fácil de hacer una POST a un servicio de WCF a través de WebClient. Tengo que estar pasando por alto algo. Gracias por intentarlo. – user208662

2

Si estoy recibiendo su método de servicio correctamente, este método no es un método POST. Que sólo puede llamar a eso con un cliente Web

WebClient wc = new WebClient() 
Uri uri = new Uri("http://yourUri/LogError/ABC/XYZ"); //ABC is your message and XYZ is your stacktrace string. 
wc.DownloadStringAsync(uri); 

O si usted está pensando en HTTP real 'post' a continuación, a continuación puede ayudar. Puede utilizar HttpWebRequest para hacer un post a cualquier servicio que está aceptando la POST

Este enlace puede ser útil - WCF REST POST XML - The remote server returned an error: (400) Bad Request

Cuestiones relacionadas