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などを教えてくれます。
私がこのように呼んでいる2番目のもの:
http://localhost:8732/sdata/myApp/myContract/-/employees?where=name eq 'bla'
そして、ここからトラブルが始まります。メソッドの従業員が呼び出されていますが、文字列を受け取りません。理由はわかりません。これはまったく同じコードです。これらのチュートリアルのように、名前を変更しただけです...
私が明らかに犯した間違いを見た人はいますか?助けていただければ幸いです。
もう 1 つ: 私は .Net 4.0 を使用しており、これをデバッガーで実行しているので、Firefox レスト クライアント経由で URL を呼び出すことができますか? これはサービス ライブラリ プロジェクトです。