4

最近、Windows Server 2008 で IIS 7.5 を実行する開発 Web サーバーに 4.5 フレームワークをインストールしました。インストール後、2 つの Web サービスで同じエラーが発生し始めました。これらの Web サービスは、MS REST スターター キットを使用して構築されました。これが私が得ているエラーです。

バインド インスタンスは既にリッスン URI に関連付けられています。2 つのエンドポイントが同じ ListenUri を共有する場合は、同じバインディング オブジェクト インスタンスも共有する必要があります。競合する 2 つのエンドポイントは、AddServiceEndpoint() 呼び出し、構成ファイル、または AddServiceEndpoint() と構成の組み合わせで指定されました。

これは、構成ファイルの system.service モデル セクションのコピーです。

<system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />  
    <bindings>
      <webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
      </webHttpBinding>
      <wsHttpBinding>
        <binding name="EnterpriseIdentityBinding" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

    <client>
      <endpoint address="https://betaapps/EnterpriseIdentity/V1/UserService.svc"
        binding="wsHttpBinding" bindingConfiguration="EnterpriseIdentityBinding"
        contract="UserServiceWCF.IUserService" name="wsSecureUsers" />
      <endpoint address="https://betaapps/EnterpriseIdentity/V1/RoleService.svc"
        binding="wsHttpBinding" bindingConfiguration="EnterpriseIdentityBinding"
        contract="RoleServiceWCF.IRoleService" name="wsSecureRoles" />
    </client>

    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>

    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceAuthorization principalPermissionMode="Custom">
            <authorizationPolicies>
              <add policyType="Hsmv.Web.Security.IdentityModel.HttpContextWithRolesPolicy, Hsmv.Web.Security" />
            </authorizationPolicies>
          </serviceAuthorization>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

.Net 4.5 をインストールした後にこのエラーが発生する理由は何ですか?

このセクションを削除しようとしたことを付け加えておきますが、それがなくても機能します。

<webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
</webHttpBinding>

このサービスはsslで実行されるため、これを使用します。WCF 4.5 はバインドとエンドポイントを作成しようとするため、web.config に含める必要はないと聞きました。そこで、このセクションは WCF によって自動的にビルドされ、必要ないのではないかと考えました。それとも私の考えが間違っていますか?ありがとう!

4

2 に答える 2

1

私はWCFチームの出身です。この問題を報告していただきありがとうございます。WCF チームは、修正のためにこの問題を引き続き調査します。調査中は、構成ファイルで webHttp エンドポイントを明示的に構成することで、この問題を回避できます。サービスは以前と同様の動作で同じになります。これらの簡単な手順に従ってください。

(この投稿で公開した構成ファイルを出発点として使用しています)

  1. 構成ファイルの <standardEndpoints> タグをコメント アウトします。

    <!--<standardEndpoints>
    <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
    </webHttpEndpoint>
    </standardEndpoints>-->

  2. 次のように、このエンドポイントの動作をリストに追加します。

    <behaviors>
    <endpointBehaviors>
    <behavior name="REST">
    <webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" />
    </behavior>
    </endpointBehaviors>
    </behaviors>

  3. 次のように、構成ファイルでサービス エンドポイントを明示的に構成します。強調表示された属性値については、サービス タイプ名とコントラクト名をそれぞれ置き換えます (注: サービスにコントラクトが定義されていない場合は、contract="" にもサービス タイプ名を挿入してください)。

    <services>
    <service name="WcfRestService1.Service1">
    <endpoint address="" binding="webHttpBinding" contract="WcfRestService1.Service1" behaviorConfiguration="REST" />
    </service>
    </services>

于 2012-10-05T21:29:06.543 に答える
0

私の場合、<security/>web.config からタグを削除すると問題は解決しました。「なし」に設定したので、これはあなたの特定のケースには当てはまらないかもしれません。

于 2016-09-08T14:48:02.600 に答える