web-dev-qa-db-ja.com

WCFで「スキーマhttpに一致するベースアドレスが見つかりませんでした」を修正する方法...

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>

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

34
Craig Shearer

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

      <!-- 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">
41
dale

あなたのIISは、サイト/アプリケーションへの接続でSSLを要求するように設定されていますか?

4
tomasr

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

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

4
LiborBes

サイト/アプリケーションのIIS構成に対して2つのことをしなければなりませんでした。私の問題は、IIS Webサイトアプリでnet.tcpを機能させることに関係していました。

最初:

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

第二:

  1. マネージャーの右側にある[アクション]メニューで、[バインド...]をクリックします。
  2. 追加をクリックします
  3. タイプを「net.tcp」に変更します
  4. バインディング情報を{open port number}に設定します:*
  5. OK
4
ZaChickster

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

2
Ákos

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

こちらをご覧ください: Scottのブログ:HTTPSに必要なWCFバインディング

1
fiberOptics

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

0
Philippe

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

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>

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

このアプローチが嫌いな場合(ファームに適していますが、単一のマシンでは脆弱です)、web.configファイルをホストのマシン上のサービス展開から1レベル上に追加し、そこにserviceHostingEnvironmentノードを配置することを検討できます。カスケードする必要があります。

0
Eric Willeke

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

0
Eric Willeke