3

IIS の Web サイト内にアプリケーションを作成しました。

私のアプリケーションは、.Net 4.0 コードを実行する WCF サービス エンドポイントをホストするためにあります (作成された Web サイトは .Net 2.0 を実行しています)。

このサービス エンドポイントをロードすると、モデルとハンドラーが見つからないというエラーが表示されます (ルート Web サイトに web.config で定義されているため)。

次のディレクティブでsystem.websystem.serviceModelをラップしてみました:

  <location path="." inheritInChildApplications="false">
    <system.web>
    ...
  </location>

ただし、ハンドラーとモジュールは引き続きロードを試みます。

次に、モジュールとハンドラーをクリアしてみました。

<httpModules>
  <clear />
</httpModules>
<httpHandlers>
  <clear />
</httpHandlers>

これにより、次のエラーが発生しました。

リクエスト タイプ「GET」の HTTP ハンドラが見つかりませんでした

次に、.svc に必要なハンドラーのみを手動で追加しようとしました

     <add 
       verb="*"
       path="*.svc"
       type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

これにより、次の結果が得られました。

アセンブリ 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' から型 'System.ServiceModel.Activation.HttpHandler' を読み込めませんでした。

IIS では、私のアプリケーションは .Net 4.0 に設定されています。アプリケーション プールでフレームワークを直接指定する方法は見当たりませんでした ([リサイクル]、[パフォーマンス]、[ヘルス]、[ID] タブしかありません)。

私がする必要があるのは、.net 4.0 を実行するこの仮想ディレクトリ/アプリケーションを 2.0 Web サイト内に追加し、WCF エンドポイントをホストすることだけです。

私の 4.0 アプリケーションは別のアプリケーション プールで実行されています。

web.config 全体を追加する

<?xml version="1.0"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.web>
      <compilation debug="true" />
      <authentication mode="Windows" />
      <httpModules>
        <clear />
      </httpModules>
      <httpHandlers>
        <clear />
        <add verb="*" path="*.svc"
          type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </httpHandlers>
    </system.web>
    <system.serviceModel>
      <bindings>
        <!--<basicHttpBinding>
        <binding name="extAcctCustMapBinding" maxBufferSize="1000000"
          maxReceivedMessageSize="1000000" />
      </basicHttpBinding>-->
      </bindings>

      <behaviors>
        <serviceBehaviors>
          <behavior name="DebugBehavior">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true" />
          </behavior>
        </serviceBehaviors>
      </behaviors>

      <services>
        <service behaviorConfiguration="DebugBehavior" name="MyService">
          <endpoint binding="basicHttpBinding" name="MyService"
            contract="IMyService" />
        </service>
      </services>

      <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
    </system.serviceModel>

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="false"/>
    </system.webServer>
  </location>
</configuration>
4

2 に答える 2

1

.NET2.0アプリケーション内でネストされたアプリケーションとして.NET4.0を実行することはできません。

于 2012-09-05T16:50:05.723 に答える
0

.NET Frameworkのバージョンは、アプリケーションレベルで定義されます。Webサイト(www.example.com)を.NET 2.0アプリケーションとして実行してから、仮想ディレクトリ(つまり、メインサイトの下にある別のアプリケーション)を.NET4.0アプリケーションとして設定できます。アプリケーションプールは異なる.NETバージョンを共有できないため、アプリケーションごとに個別のアプリプールが必要になりますが、これはサイトの構成とは関係ありません。

そうは言っても、メインサイトが.NET 2.0アプリとして構成され、仮想ディレクトリが.NET 4.0アプリとして構成されている場合、.NET4.0アプリは.NET2.0アプリから構成を継承できません。構成スキーマには下位互換性がありません。

于 2012-09-05T16:56:00.753 に答える