0

.NET 4 WCF を使用して、次の REST フル Web サービスを公開しています

  [OperationContract]
  [WebGet]
  void Test();

これは開発者向けのプログラムなので、REST フル HTTP 開発者だけでなく、WSDL を使用したい開発者もサポートしたいと考えています。私のアプローチは、サービスを2 回宣言して、従来の WSDL と REST エンドポイントの両方を公開することです。

Web.config

<serviceHostingEnvironment  aspNetCompatibilityEnabled="True" multipleSiteBindingsEnabled="true" >
  <serviceActivations >
    <add relativeAddress ="~/KeyService.svc" service="SecretDistroMVC3.Services.KeyService3"/>
  </serviceActivations>
</serviceHostingEnvironment>

Global.asax

   void Application_Start(object sender, EventArgs e)
        { 
            //  The following enables the WCF REST endpoint
            //ASP.NET routing integration feature requires ASP.NET compatibility. Please see 
            // 'http://msdn.microsoft.com/en-us/library/ms731336.aspx
            RouteTable.Routes.Add(new ServiceRoute("KeyService3", new WebServiceHostFactory(), typeof(KeyService3)));

質問

サービスを 2 つの場所で宣言するのは好きではないので、config で両方のエンドポイントを構成するか、または で両方のエンドポイントを構成するにはどうすればよいApplication_Startですか?

WCF の REST ヘルプ エンドポイント

WCF のサンプル WSDL

4

1 に答える 1

0

コードよりも web.config ファイルでこれを行う方がおそらく簡単です。以下に示す部分構成の行に沿ってサービスを構成できます。通常、サービスの実装と WSDL および REST インターフェイスの名前空間を分離して、構成を理解しやすくしていますが、これはオプションです。バインディングと動作構成の名前は、それぞれの serviceModel 要素で必要に応じてこれらを微調整する方法を明確にするためにあります。

サービスの WSDL バージョンが ASP.NET URL ルーティングの影響を受けないようにするため、エンドポイントでベース アドレスを .../Wsdl/KeyService3.svc のように設定しました。

   <service name="YourNamespace.Impl.KeyService3" behaviorConfiguration="yourServiceBehaviorSettings">

        <!-- Service Endpoints -->
        <endpoint address="Wsdl"
                  binding="wsHttpBinding"
                  bindingConfiguration="Http"
                  contract="YourNamespace.Wsdl.IKeyService3" />

        <endpoint address="mex"
                    binding="mexHttpBinding"
                    contract="IMetadataExchange"/>

        <endpoint address="Services"
              behaviorConfiguration="webBehavior"
              binding="webHttpBinding"
              name="webHttp"
              contract="YourNamespace.IKeyService3"
              listenUriMode="Explicit" />
    </service>
于 2011-05-09T14:41:02.437 に答える