15

WCFでASP.Net Webアプリケーションが動作しています。Windows サービスとしてホストされる wcf サービス。すべて良好。次に、サービス コントラクトが別の名前空間を持つように変更しました (Namespace1.IserviceContract から Namespace2.IserviceContract へ)。変更後、サーバーにデプロイし、サービス オブジェクトをインスタンス化しようとすると次のエラーが発生します。

    System.InvalidOperationException: An endpoint configuration section for contract 'Namespace2.IserviceContract' could not be loaded because more than one endpoint configuration for that contract was found. Please indicate the preferred endpoint configuration section by name.

Generated: Fri, 06 Jul 2012 21:02:56 GMT


System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.InvalidOperationException: An endpoint configuration section for contract 'Namespace2.IserviceContract' could not be loaded because more than one endpoint configuration for that contract was found. Please indicate the preferred endpoint configuration section by name.
   at System.ServiceModel.Description.ConfigLoader.LookupChannel(String configurationName, String contractName, Boolean wildcard)
   at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
   at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
   at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
   at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
   at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
   at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
   at System.ServiceModel.EndpointTrait`1.CreateChannelFactory()
   at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
   at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
   at System.ServiceModel.ClientBase`1..ctor()
   at TestApplication.ManagementWrapper.VerifyAuthentication(Int32 appId, String Token)
   at TestApplication.VerifyAuthentication(String tokenstring)

この問題について調査したところ、web.config ファイルで 2 つのクライアント エンドポイントが定義されている場合に、このタイプの例外が発生することがわかりました。ただし、クライアント エンドポイントが 1 つしか定義されていないことは確かです。さらに、この例外はサーバーにのみ表示されます。ローカルは正常に動作します。これが私たちのサービスモデルです:

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_Management" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="4194304" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="32768" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://servername:9010/Management/service/ManagementService" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Management" contract="Namespace2.IserviceContract" name="NetTcpBinding_IserviceContract" />
    </client>
  </system.serviceModel>

また、IIS とアプリケーション プールを再起動しようとしました。それでも同じ例外が発生します。

4

4 に答える 4

22

WebアドレスをManagementServiceとして使用している別のWeb.configを検索してみてください。また、web.configで、古い名前空間(contract = "Namespace1.IserviceContract")への参照を検索します。余分な.configファイルを確認することを忘れないでください。その小さな落とし穴は以前私を燃やしたことがあります。

于 2012-08-15T14:17:25.630 に答える
3

基本、net.tcp、または wshttp のように呼び出されているプロトコルが何であれ、そのアドレスは Web 構成ファイルにある必要があります。app.config ファイルのクライアントセクションから他のアドレスを削除します。私の場合は、htp://machinename:700としてサービスを呼び出しています。 /test.svc ですが、クライアント セクションには net.tcp および wshttp 構成のアドレスがあり、それらのアドレスを削除して問題を修正しました。

于 2013-12-03T20:32:07.607 に答える
0

wcf サービスの svc ファイルを右クリックし、[マークアップの表示] をクリックしてください。

そこでも名前空間を変更します。それならうまくいくはずです。

于 2012-07-07T05:45:34.950 に答える
0

web.config のすべてが正しいように見える場合、このエラーは同じサーバー上の別のアプリケーションが原因である可能性があります。同様の問題のトラブルシューティングに数日を費やしました。

私の場合、次のように、多数の WCF サービスが 1 つの Web サイトの下の IIS に Web アプリケーションとしてデプロイされた環境がありました。

/Root Website
    /Service1
    /Service2
    /Service3
    /ServiceX

子サービスの 1 つが、それ自体の物理フォルダーではなく、ルート Web サイトの物理フォルダーに誤って展開されました。この不適切な展開には、すべてのサービスに共通のクライアント エンドポイント定義が含まれていたため、すべての子サービスが機能しなくなりました。どうやら、親 Web サイトと子 Web アプリケーションで同じクライアント エンドポイントを使用することはできません。

ルート Web サイトからクライアント エンドポイントを削除すると、問題が解決しました。

于 2016-05-09T19:17:11.460 に答える