将查询参数传递给 WCF 服务

Passing in query parameters to a WCF Service

我对如何做到这一点有点困惑。我在搜索后遵循了一些示例,但仍然无法正常工作,然后大多数示例似乎又以 Json 为目标(不确定这是否会有所作为)。

我正在使用 basicHttpBinding。

所以我有一个简单的界面:

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

接下来我创建我的托管应用程序,它可以工作,我可以访问 WSDL 页面并可以查看 SaveName。

当前URL是http://example.com/

我想传入一个名称,然后将其保存到数据库中。我希望 URL 与

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

那行不通,所以我尝试了几个使用标准查询字符串参数的变体,但都行不通。

我是做错了什么还是少了一步?

要使用 WebGet / WebInvoke 属性,您不能使用 basicHttpBinding(或者,您可以使用它,但这些属性将被忽略)。 BasicHttpBinding 是使用 SOAP 协议的绑定之一,它对消息的格式有一些严格的要求(简而言之,几乎所有内容都在请求 body 中,一些寻址参数可能会在 HTTP headers).

为了能够使用 WebGet 属性定义端点操作,您的端点需要使用 webHttpBinding,并且还需要对其应用 <webHttp/> 行为(WebHttpBehavior,如果您通过代码定义端点)。

还有一件事值得指出:如果您使用 "web" 端点,WSDL 将不会拥有将客户端连接到它所需的所有信息,因此您将无法使用"WCF test client" 与之交谈。有关它的更多信息,请访问 this blog post