2008-12-23 104 views
4

考慮下面的例子:ADO.NET的DataService:傳遞參數[WebInvoke]方法

public class SomeBusinessLayerService : DataService<MyEntityContainer> 
{ 
[WebInvoke] 
void DoSomething(string someParam) 
{ 
} 
} 

我找不到例子或我如何可以傳遞參數給函數的任何幫助! 使用WebClient(或與fiddler一起使用)我可以觸發函數調用,但不管我嘗試的參數someParam總是爲空 更糟糕的是 - 如果將類型更改爲int - 我所有的嘗試都會以下面的錯誤結束:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code></code> 
    <message xml:lang="en-US">Bad Request - Error in query syntax.</message> 
</error> 

任何人都可以請幫忙的POST內容的工作示例如何我可以稱之爲?

注意:這是DataService,而不是WCF服務。我可以使用WCF服務相同的方法工作,沒有任何問題。

編輯:另外我需要POST的示例,而不是在URI中嵌入參數,因爲URI具有清理字符串的大小限制和要求。

回答

0

我從來沒有收到來自微軟的團隊對這個問題的迴應,所以我找到了以下解決方法:

創建一個名爲FunctionRequest與請求ID表,結果和Paramerter串
要執行的請求,我只是創建對象。
如果我需要發送複雜對象 - 我使用DataContext序列化將其發送到服務器。
所有的呼叫現在也記錄在數據庫中 - 這對記錄很有用。

1

也許你應該嘗試在URI中引用param(DoSomething?someParam ='param')。我試過這個,它工作正常,在其他情況下,我收到了與你一樣的錯誤。

+1

注意:我需要POST示例,而不是URI - URI有許多其他限制,例如清理字符串的大小和要求。 – 2009-01-13 18:48:34

5

經過幾小時的時間,我的頭髮也因爲「錯誤的請求 - 查詢語法錯誤」而退出,最後我通過在URI中傳遞參數來完成工作。

要特別注意引號字符串參數:

WRONG:DoSomething的someParam =參數正確:DoSomething的someParam = 'PARAM'

+0

我正面臨着相對相同的問題。現在已經解決了。非常感謝! – 2015-07-17 11:49:27

0

要完成一個小antscode response不僅必須密切關注?關於用引號括住參數值...

但是!您還必須將Guid值作爲「guid」的前綴。像這樣:

var y = ctx.Execute<bool>(new Uri("ReportExists?id=guid'" + Guid.NewGuid() + "'", UriKind.Relative)); 
+0

這仍然是URL請求,我特別需要POST示例。 – 2009-10-20 21:24:48

0

我有一個類似的問題,我是在用POST到[WebInvoke]顯着的方法x-www-form-urlencoded格式(param1=value1&param2=value2...)發送表單參數,並有一個很難成爲我想通了如何獲取參數。我終於通過以下方式實現了它:

[WebInvoke] 
void DoSomething(Stream requestStream) 
{ 
    StreamReader reader = new StreamReader(stream); 
    var requestContent = reader.ReadToEnd(); 
    var parameters = HttpUtility.ParseQueryString(requestContent); 
    var param1 = parameters["param1"]; 
    var param2 = parameters["param2"]; //and so on... 
}