2011-02-01 87 views
5

我正在WP7應用程序上工作。如果發生錯誤,我想將錯誤記錄回我的服務器。爲了處理這個,我創建了一個WCF服務操作。我希望此操作能夠保持最佳狀態,以便稍後可以在iPhone和Android應用程序中使用它。因爲我正在向數據庫寫信息,所以我認爲POST方法是最好的。出於這個原因,我使用WebInvoke。要做到這一點,我用下面的代碼:將數據POST到WP7的WCF服務

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

從我的WP7的應用程序,我想通過一個Web客戶端調用此operaiton。我的問題是,我該怎麼做?我不明白如何調用LogError操作並通過WebClient傳遞所需的數據。

謝謝你的幫助!

+0

我要添加的一件事是小心使用您的用戶3G連接回傳像這樣的分析信息。如果可能,請嘗試緩存錯誤信息,並且只有在您有WiFi或以太網連接時才發送。您可以使用NetworkInterface.NetworkInterfaceType來確定您擁有哪種類型的連接(但要小心,因爲訪問此屬性是阻止呼叫)。 – 1adam12 2011-02-03 12:45:53

回答

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

如果從服務的特定字符串的響應,你可能也包括Web客戶端的數據,並使用DownloadStringAsync獲得響應數據。

1

對於初學者,我發現一個網站應該可以幫助您開始從WP7調用服務。

嘗試this,讓我知道你在想什麼

+0

感謝您提供鏈接。不幸的是,那不是我真正想要的。這似乎應該有一個簡單的方法來通過WebClient執行POST到WCF服務。我必須俯視一些東西。謝謝你嘗試。 – user208662 2011-02-01 18:40:36

2

如果我正確地得到您的服務方法,該方法不是POST方法。你可以只調用與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); 

或者,如果你想真正的HTTP「POST」,那麼下面可能會有幫助。 可以使用的HttpWebRequest做一個POST到任何服務,這是接受POST

此鏈接可能是有益的 - WCF REST POST XML - The remote server returned an error: (400) Bad Request