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などを教えてくれます。

私がこのように呼んでいる2番目のもの:

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

そして、ここからトラブルが始まります。メソッドの従業員が呼び出されていますが、文字列を受け取りません。理由はわかりません。これはまったく同じコードです。これらのチュートリアルのように、名前を変更しただけです...

私が明らかに犯した間違いを見た人はいますか?助けていただければ幸いです。

もう 1 つ: 私は .Net 4.0 を使用しており、これをデバッガーで実行しているので、Firefox レスト クライアント経由で URL を呼び出すことができますか? これはサービス ライブラリ プロジェクトです。

4

1 に答える 1

0

パラメータの名前を変更してみてください:

string employees(string **where**);

または URL を変更します。

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

コメントへの回答:

  1. 「クエリ」という名前の単一のパラメーターを作成し、その値を解析します。この場合、クエリを文字列から実際のクエリに解析して実行する責任があります。
  2. 「 WCF データ サービス」を確認します。URL を使用してデータを照会するのに役立つ場合があります。
于 2012-07-15T20:21:08.437 に答える