我正在使用 WCF 构建 Web 服务。该服务必须支持 REST。
这是我到目前为止所做的:
我为应用程序配置了一个baseAddress
、mex
端点和一个具有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?这是一个服务库项目。