20

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

WAS を使用してローカルの IIS 7.5 でサービスをホストしていますが、正常に動作します。今、私は自分のウェブサイトで自分のサービスをホストしたいと考えています。

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

4

3 に答える 3

36

基本的に 2 つのオプションがあります。

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

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

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. *.svcその Web サイトにファイルを作成する
  4. web.configWeb サイト フォルダーに適切な を追加して、エンドポイントやサービス構成などを定義します。

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や、汎用 SOAP テスト ユーティリティであるSoapUI (無料版が使用可能) などのツールを使用して、サービスの動作を確認できます。 .

于 2012-04-29T18:17:38.953 に答える
3

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

static Global()
{
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new     ninjectServiceHostFactory(), typeof(testService)));
}
于 2015-11-24T14:01:41.880 に答える