Отправка данных в службу WCF из WP7 - PullRequest
5 голосов
/ 01 февраля 2011

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

[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.

Спасибо за вашу помощь!

Ответы [ 4 ]

2 голосов
/ 01 февраля 2011

Если я правильно получаю ваш метод Service, этот метод не является методом 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 - удаленный сервер возвратил ошибку: (400) Неверный запрос

1 голос
/ 03 февраля 2011

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

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

1 голос
/ 01 февраля 2011

Что-то в этом роде:

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 голос
/ 01 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...