2015-04-23 79 views
0

我對如何做到這一點感到困惑。我在搜索後跟蹤了一些例子,但仍無法得到這個工作,然後大多數例子似乎瞄準JSON(不知道這是否會有所作爲)。將查詢參數傳遞給WCF服務

使用basicHttpBinding的Im。

所以我有一個簡單的界面:

<ServiceContract()> 
Public Interface ICustomersService 
<OperationContract()> 
<WebGet(UriTemplate:="SaveName/{name}")> 
Sub SaveName(ByVal name as string) 

下一頁我創造我的託管應用程序,它的工作,我可以到達WSDL頁面,可以查看SAVENAME。

當前的URL是http://example.com/

我想在一個名稱,然後保存到數據庫中通過。 IM期待網址是沿

http://example.com/SaveName?name="Tony" 

這不工作,所以我嘗試了用標準的查詢字符串參數,但非工作變化的線。

我做錯了什麼,或者有一個步驟丟失?

+0

您已經包含了C#標記,但這似乎與C#沒有任何關係。 –

+0

這個問題可能與C#用戶有關 - 這個問題不是針對該語言的代碼,但可能會吸引那些可能已經解決它的問題,而不一定是瀏覽WCF標記 – Computer

回答

1

要使用WebGet/WebInvoke屬性,您不能使用basicHttpBinding(或者,您可以使用它,但這些屬性將被忽略)。 BasicHttpBinding是使用SOAP協議的綁定之一,它對於消息的格式有一些強烈的要求(簡而言之,幾乎所有事情都發生在請求體中,而一些尋址參數可能在HTTP頭中)。

爲了能夠定義使用WebGet屬性您的端點操作,您的端點需要使用webHttpBinding,也需要有適用於它的<webHttp/>行爲(WebHttpBehavior,如果你通過代碼定義您的端點) 。

還有一件值得指出的事情:如果您使用「web」端點,那麼WSDL不會擁有將客戶端連接到它所需的所有信息,因此您將無法使用「WCF測試客戶端「與它交談。在this blog post的更多信息。

+0

好吧,我會閱讀該鏈接,但如果我沿着使用webHttpBinding傳遞參數的路線,我的URL仍然可以是http://example.com/mymethod?name=「tony」,moreParamters =「」...然後將數據插入到我的數據庫中 - 所以基本上URL會保存傳遞給它的任何內容? – Computer

+0

基礎URL是您的服務託管的URL,所以是的,它仍然可以工作。 – carlosfigueira