1

WCF サービスが json を返すようにします。

ASP.NET 開発サーバーでテストしたところ、WCF テスト クライアントから動作しました (メソッドの呼び出しは問題ありません)。

しかし、ブラウザーからのテストはエラー 400 の不正な要求で失敗します。

web.config:

<configuration>
   <system.web>
      <compilation debug="true" targetFramework="4.0" />
   </system.web>
   <system.serviceModel>
      <services>
         <service name="WebServiceExample" 
                  behaviorConfiguration="MetadataBehaviour">
            <endpoint 
                address="" 
                behaviorConfiguration="AjaxBehaviour" 
                binding="webHttpBinding" 
                contract="WebService.IWebServiceExample">
               <identity>
                  <dns value="localhost" />
               </identity>
             </endpoint>
          </service>
      </services>
      <behaviors>
          <serviceBehaviors>
             <behavior>
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
             </behavior>
             <behavior name="MetadataBehaviour">
                 <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
             </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
             <behavior name="AjaxBehaviour">
                 <webHttp/>
             </behavior>
          </endpointBehaviors>
       </behaviors>
       <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
   </system.serviceModel>
   <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
   </system.webServer>
</configuration>

契約:

[ServiceContract]
public interface IWebServiceExample
{        

    [OperationContract]
    [WebGet(UriTemplate = "/check/{key}",
       ResponseFormat = WebMessageFormat.Json)]
    DataElement Check(string key);
}


[DataContract]
public class DataElement
{

    [DataMember]
    public string Key { get; set; }

    [DataMember]
    public DateTime DateSince { get; set; }

    [DataMember]
    public DateTime DateTill { get; set; }       
}

SVC マークアップ:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WebService.WebServiceExample" 
    CodeBehind="WebServiceExample.svc.cs" %>

私が試すURIは次のとおりです。

http://localhost:16679/WebServiceExample.svc/check/asd
4

1 に答える 1

1

うーん。私はそれを持っている。私がどのようにそれを経験したかを伝えると、他の人に役立つと思います。

まず、WCF サービス アプリケーションと WCF サービス ライブラリには違いがあります。サーバー(IISまたはASP.NET開発)によって設定されるため、サービスアプリケーションでエンドポイントに完全なアドレスを設定すると、競合が発生する可能性があると思います。

2 つ目は、サービス名属性に名前空間が見つからないというエラーでした。name="WebService.WebServiceExample" の代わりに name="WebServiceExample" を設定しました。

私はWCFの初心者であり、名前属性がサービスの完全なクラス名を意味することは明らかではありません。そして、エラーテキストはそれを示していません。

このトピックを読んだ後、私はそれに来ました WCF REST Service returns HTTP 400 Bad Request

これを回避する方法は、Global.asax でルーティングを定義することです (変な方法ですが、機能します)。

第三に、自分のサービスで wsdl ページを表示できるのは間違っていると思いました。RESTful WCF Service が wsdl を生成するのは奇妙で、間違いのように見えました。しかし、それは正常な動作であると言えます。

設定でこのようなものを設定した場合

その後、RESTful サービスは表示を許可します

localhost/Service.svc?wsdl の WSDL

localohost/Service.svc/help の REST 関数

最後に、いくつかの便利なリンク: http://www.codeproject.com/Articles/167159/How-to-create-a-JSON-WCF-RESTful-Service-in-60-sec --- WCF サービス ライブラリ。これを実行するには、VS を管理者として起動する必要があります。

http://robbincremers.me/2012/01/05/wcf-rest-service-with-xml-json-response-format-according-to-content-type-header/ --- WCF サービス アプリケーション

于 2012-10-13T20:24:45.223 に答える