2012-03-13 10 views
4

複数のバインディングを使用してRESTおよびSOAP経由でデータを公開するWCF Webサービスを実装しています。このサービスはIIS上でホストされます。WCFサービス(RESTおよびSOAP)を設定する場所

私は以前にいくつかのWCFサービスを作成していましたが、web.configを使用してそれらを設定し、Global.asaxファイルのルートを設定することについて少しは知っていましたが、私は最もクリーンな設定またはWCFサービスの構成に関するベストプラクティスです。 - IIS上でホスティングサービスや構成がIIS上で行うことができたときに、これは必要とされている

をweb.configファイルは、セットアップバインディング、エンドポイント、セキュリティなどに使用することができます:ここでは

は、私がこれまでに考え出したものです?

Global.asaxを使用することで、ルーティング(および他の多くのもの)を設定することができます。これを行うには適切な場所ですか?

void Application_Start(object sender, EventArgs e) 
    { 
     RouteTable.Routes.Add(new ServiceRoute("Service", new WebServiceHostFactory(), typeof(Service))); 
    } 

私はこのトピックをグーグルでいくつかの時間を費やしてきたし、すべてのリンクは、タスクを達成する方法については、それ自身の意見を持っているようです。

そこで私は次のことをサポートするために、WCFサービスを実装する/設定する方法のいくつかの入力をしたいと思います:

  • は、REST/JSON
  • Pubishを介してデータを公開するデータSOAP/XMLを介しました出版メタデータ
  • さまざまなサービスを提供します。それは問題ではない - 私は両方のSOAP/RESTを使用してデータを公開する方法を知ってるレコードのhttp://domain.com/Servicehttp://domain.com/AuthService

。私はちょうどサービスのためのほとんどのきれいにするか最小構成にすることを試みている。

ご意見をいただければ幸いです。

答えて

6

これは私がこれを行った方法です。

のWeb.config:

<system.serviceModel> 
    <services> 
     <service name="Service"> 
      <endpoint address="soap" contract="IService" binding="basicHttpBinding"/> 
      <endpoint address="rest" contract="IService" binding="webHttpBinding" behaviorConfiguration="restBehavior"/> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="restBehavior"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

契約は次のようになります.NET 4.5で

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate="/Update/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
    void Update(string id, Entity entity); 
} 
+0

あなたはどのようにリクエストしますか? http:// localhost:port/Service/Update/1? 私はちょうどあなたの提案を試みたが、私はhttp:// localhost:port/Service1.svcでサービスにアクセスすることができ、/ Service/Update/1を使用することはできませんので、私は尋ねています –

+0

SOAPクライアントの場合、 URLはlocalhost:port/Service.svc/soapです。 RESTの場合は、localhost:port/Service.svc/rest/Update/1です。私の答えは、どのように2つのエンドポイントを最小限に構成できるかということです。正確なURLが必要な場合は、追加の設定が必要です。 –

+0

私は2つの異なるURLにあるサービスに設定できる必要があります:http://domain.com/Serviceとhttp://domain.com/AuthService –

0

あなたは全くの.configファイル内の任意の構成を省略することができます。 [ServiceContract]、[OperationContract]、[DataContract]は必須です。彼らは、そのドキュメントに明示的に言うことはありませんが、それは動作します:) サービス要素の必要性を除去することにより、簡単にWCFサービスを構成

」.NET Frameworkの4.5になります。あなたはサービスセクションを追加しない場合サービスセクションに任意のエンドポイントを追加し、サービスがプログラムでエンドポイントを定義していない場合は、デフォルトのエンドポイントのセットがサービスに自動的に追加されます。 -

https://msdn.microsoft.com/en-us/library/ee358768%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

関連する問題