0

我正在使用 WCF 构建 Web 服务。该服务必须支持 REST。

这是我到目前为止所做的:

我为应用程序配置了一个baseAddressmex端点和一个具有webhttpbinding.

这是服务配置:

<service name="ServiceLibrary.Service" behaviorConfiguration="myServiceBehavior">
    <endpoint 
        address="" 
        behaviorConfiguration="webHttp"
        binding="webHttpBinding" bindingConfiguration="" 
        contract="ServiceLibrary.IEvalService" >
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/sdata/myApp/myContract/-/"/>
      </baseAddresses>
    </host>
  </service>

这是行为配置:

 <serviceBehaviors>
    <behavior name="myServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="webHttp">
      <webHttp/>
    </behavior>
  </endpointBehaviors>

我正在建立这样的服务合同:

[ServiceContract]
public interface IEvalService
{
    [OperationContract]
    [WebGet(UriTemplate = "/employees('{MDNr}:{ANNr}')")]
    Atom10ItemFormatter GetEmployeeByPK(string MDNr, string ANNr);

    [OperationContract]
    [WebGet]
    string employees(string queryString);
}

我正在一个单独的类中处理操作合同:

public class Service : IEvalService
{
    public Atom10ItemFormatter GetEmployeeByPK(string MDNr, string ANNr){return Employee.GetEmployeeByPK(MDNr, ANNr);}
    public string employees(string queryString)
    {
        System.Diagnostics.Debug.WriteLine("Query: " + queryString);
        return queryString;
    }

这两个方法都在执行 GET 方法后被调用。

我这样称呼第一个:

http://localhost:8732/sdata/myApp/myContract/-/employees('3:37')

它完美地工作,给我ID等。

我这样称呼的第二个:

http://localhost:8732/sdata/myApp/myContract/-/employees?where=name eq 'bla'

这就是麻烦开始的地方。方法员工被调用,但它没有收到任何字符串。我不知道为什么。这是完全相同的代码,就像在那些教程中一样,我只是更改了名称......

有人看到我明显犯的错误吗?我真的很感激任何帮助。

还有一件事:我正在使用 .Net 4.0 并在调试器上运行它,这样我就可以通过 firefox rest 客户端调用 url?这是一个服务库项目。

4

1 回答 1

0

尝试更改参数的名称:

string employees(string **where**);

或更改网址:

http://localhost:8732/sdata/myApp/myContract/-/employees?**queryString**=name eq 'bla'

回复您的评论:

  1. 创建一个名为“查询”的参数,然后解析它的值。在这种情况下,您负责将查询从字符串解析为实际查询并执行它。
  2. 检查“ WCF 数据服务”。它可以帮助您使用 URL 查询数据。
于 2012-07-15T20:21:08.437 回答