2011-02-01 3 views
5

Я работаю над приложением WP7. Если произошла ошибка, я хочу зарегистрировать ошибку на моем сервере. Чтобы справиться с этим, я создал операцию службы WCF. Я хочу, чтобы эта операция была REST, чтобы я мог использовать ее с iPhone и Android-приложениями. Поскольку я пишу информацию в базу данных, я думал, что метод POST будет лучше. По этой причине я использую WebInvoke. Для этого я использую следующий код:Данные POST для службы WCF от WP7

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

С моей WP7 приложения, я хочу назвать это Отделом через WebClient. Мой вопрос: как мне это сделать? Я не понимаю, как вызвать операцию LogError и передать необходимые данные через WebClient.

Благодарим за помощь!

+0

Одна вещь, которую я хотел бы добавить, - это быть осторожным в использовании вашего 3G-соединения для отправки этой информации аналитики. Если возможно, попробуйте кэшировать информацию об ошибке и отправлять ее только при наличии соединения WiFi или ethernet. Вы можете использовать NetworkInterface.NetworkInterfaceType, чтобы определить, какой тип соединения у вас есть (хотя будьте осторожны, так как доступ к этому свойству является блокирующим вызовом). – 1adam12

ответ

1

Что-то вдоль линий:

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

Если вы хотите отправить дополнительная информация в дальнейшем, вы можете сделать это с:

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

И есть обратный вызов:

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

Если есть конкретный ответ строки из службы, вы можете также включать данные в WebClient и использовать DownloadStringAsync для получения данных ответа.

1

Для начала я нашел веб-сайт, который поможет вам начать работу с вызовом службы WP7.

this Попробуйте и дайте мне знать, что вы думаете

+0

Спасибо за предоставление ссылки. К сожалению, это не совсем то, что я искал. Просто кажется, что должен быть простой способ сделать POST для службы WCF через WebClient. Я должен что-то игнорировать. Спасибо за попытку. – user208662

2

Если я правильно получаю ваш метод обслуживания, этот метод не является методом POST. Вы можете просто позвонить, что с WebClient

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); 

Или, если вы думаете о реальном HTTP «POST», то ниже, могут помочь. Вы можете использовать HttpWebRequest сделать POST на любую услугу, которая принимает POST

Эта ссылка может быть полезным - WCF REST POST XML - The remote server returned an error: (400) Bad Request

1

Посмотрите на этот пост http://blog.ike.to/2011/02/02/wp7-application-crash-reporter/

Это звучит, как это будет в значительной степени сделать то, что вам нужно уже, хотя вы можете настроить его в соответствии с вашим собственным интерфейсом сервиса.

Смежные вопросы