0

JSON 形式で WCF Web サービス (c# で記述) から要求を出し、応答を受信しようとしています。これはエンドポイントの構成です。

 <service behaviorConfiguration="UserServiceBehavior" name="UserService">
    <endpoint address="JSON" binding="webHttpBinding" contract="IUserService" 
              behaviorConfiguration="JSONEndpointBehavior" bindingConfiguration="" name="RESTEP">
    </endpoint>
    <endpoint address="" binding="basicHttpBinding" contract="IUserService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>

...

<endpointBehaviors>
    <behavior name="JSONEndpointBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>

メソッドの注釈は次のようなものです。

[WebInvoke(Method = "GET", UriTemplate = "myUriTemplate", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]

CLR 型を返すメソッドの場合、これはうまく機能します。応答は JSON 形式です (また、要求もあると思います)。CLR 以外の型 (私の場合はプロキシ クライアント) を返すメソッドの場合、JSON で要求を作成して応答を受信しようとすると、サーバーは 404 エラーを返しますが、これを切り捨てると:

RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json

サーバーは、探しているデータを含む XML ドキュメントで応答します。これは、クライアント プロキシに関連する問題でしょうか? JSON シリアライゼーションとデシリアライゼーションをサポートするクライアント プロキシを生成するにはどうすればよいですか? ヘルプ ページをオンにすると、実際にはメソッド リストにメソッドが表示されますが、URL から起動することはできません。

4

1 に答える 1

0

問題が見つかりました。SvcTracingTool のおかげで、発生した例外が示すように、すべてシリアル化の問題が原因であることがわかりました。

InnerException メッセージは、「型 'xxxxxxxxx' は、IsReference 設定が 'True' であるため、JSON にシリアル化できません。参照を表す標準化された形式がないため、JSON 形式は参照をサポートしません。シリアル化を有効にするには、型または型の適切な親クラスの IsReference 設定を無効にします。詳細については、InnerException を参照してください。

次のステップは、WCF が例外ではなく 404 エラーを返した理由を理解することです。

于 2013-04-09T08:38:44.180 に答える