web-dev-qa-db-ja.com

WebサイトでWCFサービスをホストするにはどうすればよいですか?

私はWCFを初めて使用します。サンプルのWCFサービスを開発しました。私のサービスはbasicHttpバインディングを使用しています。

WASを使用してローカルIIS 7.5でサービスをホストし、正常に機能します。次に、Webサイトでサービスをホストします。

私はGoogleを検索しますが、それらのほとんどはIISのローカルホストでホストされています。どうすればいいのか教えてください。チュートリアルまたはステップバイステップガイドを参照することをお勧めします。

20
Hasanuzzaman

基本的に2つの選択肢があると思います。

オプション1-「bin」デプロイ(推奨オプション)

  1. wCFサービスをDLL(クラスライブラリ)にコンパイルします
  2. iISでWebサイトを作成する
  3. wCFDLLをWebサイトの.\binフォルダーにコピーします
  4. そのWebサイトに*.svcファイルを作成します
  5. ウェブサイトフォルダに適切なweb.configを追加して、エンドポイントやサービス構成などを定義します。

これで、WCFサービスは、Webサイトのベースアドレスに加えて、*.svcファイルの名前でアクセスできるようになります。

http://myserver/someweb/Myservice.svc

*.svcは次のようになります。

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService"  %>

Service=属性は、サービスを実装するクラスを示します-名前空間で完全修飾されています。

オプション2-App_Codeにデータを入力します

  1. iISでWebサイトを作成する
  2. wCFに関連するすべての*.csファイルを.\App_Codeフォルダーに直接配置します
  3. そのWebサイトに*.svcファイルを作成します
  4. ウェブサイトフォルダに適切なweb.configを追加して、エンドポイントやサービス構成などを定義します。

これで、WCFサービスは、Webサイトのベースアドレスに加えて、*.svcファイルの名前でアクセスできるようになります。

http://myserver/someweb/Myservice.svc

*.svcは次のようになります。

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %>

単純なサンプルweb.configは次のようになります。

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="WithDebug">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  <services>
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug">
      <endpoint
          address=""
          binding="basicHttpBinding"
          contract="SimpleWCF.IHelloIndigoService" />
      <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

基本的に<service>タグを定義します。また、name=は、サービスを実装するクラスを示します。名前空間で完全修飾されています。少なくとも1つのエンドポイントが含まれている必要があります(「mex」エンドポイントはオプションです)が、特に開発とテストに非常に役立ちます。これにより、クライアントはサービスを「発見」し、サービスの説明を取得して、サービスとインターフェイスできるようになります。

サービスがIISにデプロイされると、WCFに無料で付属する WCF Test Client 、または一般的な SoapUI などのツールを使用してサービスの動作を確認できます。目的SOAPテストユーティリティ(無料版を使用)。

36
marc_s

古いスレッド、誰かがそれを見つけた場合...しかし、*。svcの代わりに、global.asaxで作成することもできます。

static Global()
{
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new     ninjectServiceHostFactory(), typeof(testService)));
}
3
Roelant

マークの答えに加えて、以下のように* .svcファイルにファクトリ属性を追加する場合、メインプロジェクトにあるweb.configファイルの内容を変更する必要はありません。もう一度繰り返します。 web.configファイルに大きな混乱はありません。そのままにしておきます。これは、svcファイルのFactory属性がすべてを処理するという事実によるものです。

<%@ ServiceHost Language="C#" Debug="true" Service="WCF_Simple_Service.HelloIndigoService" Factory="System.ServiceModel.Activation.WebServiceHostFactory"  %>

ただし、サービスを呼び出すと、エンドポイントが見つからないというエラーが発生することを言わなければなりません。ただし、サービスでメソッドを呼び出すと、すべて機能します。安らかなwcfでテスト済み。

0
smoothumut