从WP7向WCF服务POST数据

时间:2011-02-01 17:03:25

标签: c# wcf windows-phone-7

我正在研究WP7应用程序。如果发生错误,我想将错误记录回我的服务器。为了解决这个问题,我创建了一个WCF服务操作。我希望这个操作是RESTful,以便我以后可以将它与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 个答案:

答案 0 :(得分:2)

如果我正确获取您的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 - The remote server returned an error: (400) Bad Request

答案 1 :(得分:1)

对于初学者,我找到了一个网站,可以帮助您开始从WP7调用该服务。

尝试this并告诉我您的想法

答案 2 :(得分: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来获取响应数据。

答案 3 :(得分:1)

看一下这篇文章http://blog.ike.to/2011/02/02/wp7-application-crash-reporter/

虽然您可能想要调整它以适合您自己的服务界面,但听起来它几乎可以满足您的需求。