1

IIS を介してローカルでホストされる WCF Web サービスを作成しました。サービスが正常に動作していることを確認するために WCF テスト クライアントを使用しましたが、手動の REST 呼び出しでテストしたいと考えています。RESTClient 3.1を使用して REST 呼び出しを送信しています。メソッドから結果を取得することはできますが、JSON をパラメーターとして送信しようとすると、常に null パラメーターになります。私は何を間違っていますか?私のリクエストから返される本文は「FAIL :(」です。よろしくお願いします。これまで、この問題に 1 日以上費やしてきました。

サービス契約:

[OperationContract]
    [WebInvoke(
      Method = "POST",
      ResponseFormat = WebMessageFormat.Json,
      BodyStyle = WebMessageBodyStyle.Bare)]
    public string Route2(Position start)
    {
        if (start == null)
        {
            return "FAIL :(";
        }
        else
        {
            return "SUCCESS :)";
        }
    }

** web.config: **

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
    <handlers>
      <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
    </handlers>
    <defaultDocument>
      <files>
        <add value="help" />
      </files>
    </defaultDocument>
  </system.webServer>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
      <service name="Primordial.GroundGuidance.Service.GroundGuidanceService">
        <endpoint address="soap" binding="basicHttpBinding" contract="Primordial.GroundGuidance.Service.GroundGuidanceService" />
        <endpoint address="" binding="webHttpBinding" bindingConfiguration=""
      name="web" contract="Primordial.GroundGuidance.Service.GroundGuidanceService"
      kind="webHttpEndpoint" endpointConfiguration="webEndpointWithHelp" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
     </services>
    <standardEndpoints>
      <webHttpEndpoint>
         <standardEndpoint name="webEndpointWithHelp" helpEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

私は RESTClient を使用しているため、呼び出しは単なる文字列/ファイルではありませんが、ヘッダーと値のペアの場合は次のようになります: Accept: application/json contentType: application/json

ボディ タイプは「application/json; charset=UTF-8」ボディに設定されます。

{
  "elevation": 0,
  "latitude": 35.31,
  "longitude": -116.41
}
4

1 に答える 1

1

別の日に私の問題を掘り下げた後、それは私のJSONであり、WCFの使用ではありませんでした。JSONでメソッドパラメーター名を指定する必要がありました。私の方法では

[WebInvoke(
      Method = "POST",
      ResponseFormat = WebMessageFormat.Json,
      BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string Route2(Position start, Position end)

適切なJSONは次のとおりです。

{
    "start": {
        "elevation": 1,
        "latitude": 35.3,
        "longitude": -116.4
    },
    "end": {
        "elevation": 1,
        "latitude": 35.3,
        "longitude": -116.4
    }
}
于 2013-01-24T16:48:27.180 に答える