0

次のインターフェイスを持つ単純な WCF サービスがあります。

[ServiceContract]
public interface IPageService {

    [OperationContract]
    [WebGet(UriTemplate = "/GetPage/{pageNumber}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Page GetPage(string pageNumber);

    [OperationContract]
    [WebInvoke(UriTemplate = "/SetPages", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    string SetPages(Page[] pages);
}

構成ファイルの system.serviceModel セクションは次のとおりです。

<system.serviceModel>
  <protocolMapping>
    <add scheme="http" binding="webHttpBinding"/>
  </protocolMapping>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior>
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

次の JavaScript を使用して GetPage メソッドを呼び出します。

$.ajax({
    cache: false,
    url: 'http://localhost/Test/PageService.svc/GetPage/1', 
    type: 'GET',
    success: function(result) {
        // do success stuff 
    }, 
    error: function(req, status, error) { 
        // do error stuff
    } 
});

次の JavaScript を使用して SetPages メソッドを呼び出すと、404 エラーが返されます。

$.ajax({
    cache: false,
    url: 'http://localhost/Test/PageService.svc/SavePages', 
    type: 'POST',
    data: '[{...}]', 
    dateType: 'json',
    contentType: 'application/json',
    processData: false,
    success: function(result) { 
        // do success stuff 
    }, 
    error: function(req, status, error) { 
        // do error stuff 
    } 
});

私はすでに ajax 呼び出しでパラメーターのほぼすべての組み合わせを試しましたが、違いはありません。私は構成ファイルをいじって、ここやさまざまなブログで提案されているさまざまな構成を試しましたが、両方のメソッドが AddressFilter または ContractFilter の不一致を返すようにするだけです。私は何が欠けていますか?これらの両方の方法を機能させるための最も迅速で簡単な方法は何ですか?

4

1 に答える 1

2

投稿したコードによると、jscript は SavePages メソッドを呼び出しますが、サーバー側では post メソッドの名前は SetPages です。

于 2012-11-24T19:33:32.143 に答える