2

コードからサービスを呼び出していますが、何らかの理由でサービスが停止すると、EndPointNotFound 例外が発生します。

 <binding name="NormalMode" transferMode="Buffered" receiveTimeout="24.20:31:23.6470000">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      <security mode="None" />
    </binding>

openTimeOut を設定していないため、デフォルトの 1 分間のタイムアウトが考慮されます。

このようにサービスを呼び出していますが、

 private void MyServiceCall(Action serviceCall)
    {
        try
        {
            if (serviceCall != null)
            {
                serviceCall();
            }
        }
        catch (EndpointNotFoundException endpointNotFoundException)
        {
                            throw new EndpointNotFoundException(endpointNotFoundException.Message, endpointNotFoundException);
        }

私の質問は、サービスが停止した場合、EndPointNotFoundException をスローするのに 1 分かかりますか??

編集::

この場合、サービスが停止していることがわかります。サービスを停止して、そのようにテストしています。問題は、切断されたシナリオを開発したことです。サービスが停止すると、デフォルトのデータが返されますが、時間がかかるため、それを担当するのは openTimeOut であるかどうかを調査しています。

4

2 に答える 2

2

クライアント接続が失敗する理由は多数あります。たとえば、ネットワークの問題、サーバー アプリケーション プールが停止またはロックされている、サーバーの ThreadPool が使い果たされているなどです。

これらは必ずしも EndpointNotFoundException をスローするとは限りません。たとえば、アプリケーション プールが停止している場合、503 エラーがクライアントでServiceTooBusyExceptionとして表示されます。この場合、エラーは「すぐに」発生し、サービスがサーバー上でそれ自体を「復活」させるために設定されたタイムアウト期間を「待機」しません。(つまり、 openTimeoutは許可される最大時間を指定します)

おそらく、基本例外の 1 つをキャッチして、そこから作業する方がよいでしょ System.ServiceModel.CommunicationExceptionSystem.Exception

無関係な点として、すべての WCF 構成設定を任意に「最大化」することは賢明ではないことに注意してください - C# WCF - Client/Server - System.OutOfMemory Exceptionを参照してください。

于 2012-04-04T09:35:25.553 に答える
0

オープン操作が完了するまでの時間間隔を指定する TimeSpan 値。この値はゼロ以上である必要があります。デフォルトは 00:01:00 です。

これから私が理解していることは、すでに開いている操作は1分以内に完了する必要があるということです。任意のコメント ??私はそれをテストしており、EndPointNotFoundException をスローするのに 5 秒しかかからないためです。

于 2012-04-04T09:45:24.597 に答える