0

次のレイアウトの 2 つのプロジェクトがあるとします。

  • プロジェクト「ウェブ」
    • global.asax (eg 内の登録先はこの先を考えましたvoid Application_Start(System.Object sender, System.EventArgs e)
    • web.config
  • プロジェクト「wcf」
    • DemoService.cs
    • IDemoService.cs

web.configこのようになります

<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="fooBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="wcf.DemoService"
                     behaviorConfiguration="fooBehavior">
                <endpoint address="mex"
                          binding="mexHttpBinding"
                          contract="IMetadataExchange" />
                <endpoint address=""
                          binding="wsHttpBinding"
                          contract="wcf.IDemoService" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

だから...今...どこか(上記のように私が考えたglobal.asax)に登録する必要があります.URIを参照する wcf.DemoService解決され、mex-requestの場合wcf.IDemoServiceは属性を読み取ってWSDLを取得するために解決されます。

これは通常、.svcファイルを作成し、最初の行にヘッダーを配置することによって行われます。たとえば、次のようになります。

<%@ ServiceHost Language="C#" Debug="true" Service="wcf.DemoService" %>

たとえば、コンソールアプリケーションでは

var serviceHost = new ServiceHost(typeof (wcf.DemoService));
serviceHost.Open();

hostこれを要素内の要素と組み合わせてURIserviceを指定するか、別の ctor-overload を使用しますServiceHost

しかし、静的登録 (またはweb.configIIS 7.5 で機能する任意の登録) を使用したいのですが、これは可能ですか? もしそうなら、どのように?

4

1 に答える 1

9

WCF 4 (.NET 4.0) は、サービスのコード ベースの登録と構成ベースのサービスの登録の両方を提供します。

コード ベースの構成は、 new による ASP.NET ルーティングによって実現されますServiceRoute

RouteTable.Routes.Add(new ServiceRoute("DemoService", 
                          new ServiceHostFactory(), typeof(wcf.DemoService));

通常、ルートは REST サービスで使用されますが、SOAP サービスでも機能します。

構成にサービスを登録することを構成ベースのアクティベーションと呼びます。web.config で仮想 .svc ファイルを定義します。

<serviceHostingEnvironment>
   <serviceActivation>
      <add relativeAddress="DemoService.svc" service="wcf.DemoService" />
   </serviceActivation>
</serviceHostingEnvironment>

どちらの場合も、ベース アドレスは常に IIS でホストされている Web サイトによって指定されるため、サービスへの相対パスのみを定義しています。

于 2012-07-17T17:50:18.970 に答える