34

IIS でホストされているサーバーに WCF サービスを展開しようとしています。当然、それは私のマシンで動作します:)

しかし、デプロイすると、次のエラーが発生します。

このコレクションには、スキーム http のアドレスが既に含まれています。このコレクションには、スキームごとに 1 つのアドレスしか存在できません。

これをグーグルで検索すると、serviceHostingEnvironment 要素を web.config ファイルに配置する必要があることがわかりました。

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://mywebsiteurl"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

しかし、これを行うと、次のようになります。

バインディング BasicHttpBinding を持つエンドポイントのスキーム http に一致するベース アドレスが見つかりませんでした。登録されているベース アドレス スキームは [https] です。

ベースアドレスが分からないようですが、どうやって指定すればよいのでしょうか?私のweb.configファイルの関連セクションは次のとおりです。

<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://mywebsiteurl"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>

  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfPortalBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IWcfPortal"
               maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
               receiveTimeout="00:10:00" sendTimeout="00:10:00"
               openTimeout="00:10:00" closeTimeout="00:10:00">
        <readerQuotas maxBytesPerRead="2147483647" maxArrayLength="2147483647"
               maxStringContentLength="2147483647"/>
      </binding>
    </basicHttpBinding>
  </bindings>

  <services>
    <service behaviorConfiguration="WcfPortalBehavior" name="Csla.Server.Hosts.Silverlight.WcfPortal">
      <endpoint address="" binding="basicHttpBinding" contract="Csla.Server.Hosts.Silverlight.IWcfPortal"
      bindingConfiguration="BasicHttpBinding_IWcfPortal">
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

何が起こっているのか、それを修正する方法について誰かが光を当てることができますか?

4

9 に答える 9

44

セキュリティモードを「トランスポート」から「なし」に変更してみてください。

      <!-- Transport security mode requires IIS to have a
           certificate configured for SSL. See readme for
           more information on how to set this up. -->
      <security mode="None">
于 2011-03-30T10:36:22.777 に答える
5

サイト/アプリケーションのIIS構成に対して2つのことを行う必要がありました。私の問題は、IISWebサイトアプリでnet.tcpを機能させることに関係していました。

初め:

  1. IISアプリ名を右クリックします。
  2. Webサイトを管理する
  3. 高度な設定
  4. 有効なプロトコルを「http、net.tcp」に設定します

2番:

  1. Managerの右側にある[アクション]メニューで、[バインディング...]をクリックします。
  2. [追加]をクリックします
  3. タイプを「net.tcp」に変更します
  4. バインディング情報を{ポート番号を開く}に設定します:*
  5. わかった
于 2011-07-21T20:14:30.637 に答える
4

web.config で baseAddressPrefixFilters を使用する場合は、IIS (6) もセットアップする必要があります。これは私を助けました:

1/ IIS でサイトを見つけます。2/ プロパティ / Web サイト (タブ) / IP アドレス -> 詳細設定ボタン 3/ web.config で使用する同じポートに新しいホスト ヘッダーを追加します。

于 2010-05-12T17:01:34.733 に答える
4

サイト/アプリケーションへの接続で SSL を要求するように IIS が構成されている可能性はありますか?

于 2009-05-16T17:26:05.390 に答える
2

リストの最初のベース アドレスのみが引き継がれます (IIS から)。.NET4 より前のスキームでは、複数のベース アドレスを持つことはできません。

于 2011-09-07T13:43:13.443 に答える
1

解決策は、Web.Config ファイル内でカスタム バインドを定義し、セキュリティ モードを "トランスポート" に設定することです。次に、エンドポイント定義内で bindingConfiguration プロパティを使用して、カスタム バインディングを指定するだけです。

ここを参照してください: Scott のブログ: HTTPS に必要な WCF バインディング

于 2012-03-22T05:41:17.777 に答える
0

IISでホストされている場合は、ベースアドレスを指定する必要はなく、仮想ディレクトリのアドレスになります。

于 2009-05-18T09:36:20.893 に答える
0

外部構成セクションと、展開固有の外部.configファイルを既知の場所にドロップする追加の展開手順を使用して、これを非常に簡単に解決する方法があるはずです。通常、このソリューションを使用して、さまざまな展開環境(ステージング、QA、本番など)のさまざまなサーバー構成を処理します。特別なコピーが発生しない場合は、「開発ボックス」がデフォルトになります。

于 2010-03-19T02:50:54.213 に答える
0

私の修正を確認しました:

web.config ファイルでは、次のように構成する必要があります。

<system.serviceModel >
    <serviceHostingEnvironment configSource=".\Configurations\ServiceHosting.config" />
    ...

次に、次のようなフォルダー構造を構築します。

/web.config
/Configurations/ServiceHosting.config
/Configurations/Deploy/ServiceHosting.config

ベースの serviceHosting.config は次のようになります。

<?xml version="1.0"?>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

/Deploy 内のものは次のようになります。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="http://myappname.web707.discountasp.net"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

さらに、手動または自動のデプロイ手順を追加して、/Deploy からファイルを /Configurations のファイルの上にコピーする必要があります。これは、サービス アドレスと接続文字列に対して非常にうまく機能し、他の回避策を実行する手間を省きます。

このアプローチが気に入らない場合 (ファームにうまくスケーリングできますが、単一のマシンでは弱い)、web.config ファイルをホストのマシンのサービス デプロイから 1 レベル上に追加し、そこに serviceHostingEnvironment ノードを配置することを検討してください。それはあなたのためにカスケードするはずです。

于 2010-03-19T03:48:39.620 に答える