問題タブ [communicationexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - WCF サービスで例外をスローすると CommunicationException がスローされる
サービスで例外をスローすると、その直後に別の例外がスローされます。
IErrorHandler を実装しているので、(log4net を使用して) すべての未処理の例外をログに記録できます。
それはなぜですか?
c# - WCF、BasicHttpBinding:新しい接続を停止しますが、既存の接続は続行できます
.NET 3.5、VS2008、BasicHttpBindingを使用したWCFサービス
WindowsサービスでホストされているWCFサービスがあります。アップグレードや定期的なメンテナンスなどの理由でWindowsサービスがシャットダウンした場合、WCFサービスを正常にシャットダウンする必要があります。WCFサービスには、完了するまでに最大数秒かかる可能性のあるメソッドがあり、通常のボリュームは1秒あたり2〜5回のメソッド呼び出しです。新しい呼び出しを拒否しながら、以前に呼び出したメソッドを完了できるようにWCFサービスをシャットダウンする必要があります。このようにして、約5〜10秒でクワイエット状態に到達し、Windowsサービスのシャットダウンサイクルを完了することができます。
ServiceHost.Closeを呼び出すことは正しいアプローチのように見えますが、進行中のメソッドが完了するのを待たずに、クライアント接続をすぐに閉じます。私のWCFサービスはそのメソッドを完了しますが、クライアントが既に切断されているため、応答を送信する相手がいません。これは、この質問によって提案された解決策です。
イベントのシーケンスは次のとおりです。
- クライアントは、VSで生成されたプロキシクラスを使用して、サービスでメソッドを呼び出します
- サービスがサービスメソッドの実行を開始します
- サービスはシャットダウンの要求を受け取ります
- サービスはServiceHost.Close(またはBeginClose)を呼び出します
- クライアントが切断され、System.ServiceModel.CommunicationExceptionを受け取ります
- サービスはサービスメソッドを完了します。
- 最終的に、サービスは(アプリケーションロジックを介して)実行する作業がなくなったことを検出し、終了します。
私が必要としているのは、クライアント接続を開いたままにして、クライアントがサービスメソッドが正常に完了したことを認識できるようにすることです。現在、接続が閉じられているだけで、サービスメソッドが正常に完了したかどうかはわかりません。WCFを使用する前は、ソケットを使用していましたが、ソケットを直接制御することでこれを行うことができました。(つまり、受信と送信を実行している間にAcceptループを停止します)
アップストリームファイアウォールがトラフィックを別のホストシステムに転送できるように、ホストHTTPポートを閉じることが重要ですが、既存の接続は開いたままにして、既存のメソッド呼び出しを完了できるようにします。
WCFでこれを実現する方法はありますか?
私が試したこと:
- ServiceHost.Close()-クライアントをすぐに閉じます
- ServiceHost.ChannelDispatchers-それぞれでListener.Close()を呼び出します-何もしないようです
- ServiceHost.ChannelDispatchers-それぞれでCloseInput()を呼び出します-クライアントをすぐに閉じます
- ServiceHost.OnClosing()をオーバーライドします-閉じることができると判断するまで閉じるを遅らせることができますが、この間は新しい接続が許可されます
- ここで説明する手法を使用して、エンドポイントを削除します。これはすべてを一掃します。
- ネットワークスニファを実行してServiceHost.Close()を監視します。ホストは接続を閉じるだけで、応答は送信されません。
ありがとう
編集:残念ながら、フィールドのクライアントはすでに展開されているため、システムがシャットダウンしているというアプリケーションレベルのアドバイザリ応答を実装できません。(私はサービスのみを制御し、クライアントは制御しません)
編集:Redgate Reflectorを使用して、MicrosoftのServiceHost.Closeの実装を確認しました。残念ながら、internal
コードがアクセスできないいくつかのヘルパークラスを呼び出します。
編集:探していた完全な解決策は見つかりませんでしたが、サービスメソッドを入力する前にIMessageDispatchInspectorを使用してリクエストを拒否するというBenjaminの提案が最も近かったです。
asp.net - WCF応答が長すぎます-認証エラー
私が現在働いているプロジェクトでは、ビジネスエンティティの配列を返すWCFサービスが公開されています。これを請求書と呼びましょう。
使用される認証メカニズムはWindows認証であり、WCFサービスはIIS6でホストされるWebアプリケーションでホストされます。
最初に64kBを超えるデータを取得していたときに、「着信メッセージの最大メッセージサイズクォータ(65536)を超えました。クォータを増やすには、適切なバインディング要素のMaxReceivedMessageSizeプロパティを使用してください」というCommunicationExceptionがスローされました。
いいでしょう、App.configでmaxReceivedMessageSizeとmaxBufferSizeの両方の値を65536000に増やしました(後者は、ArgumentExceptionで「TransferMode.Bufferedの場合、MaxReceivedMessageSizeとMaxBufferSizeは同じ値。パラメータ名:bindingElement ")。
今、私はより大きな応答を受け取ることができました...
624要素(約2.2 MB)の後に、別の制限(I THINK)に達するまで、奇妙な例外がスローされます。
サーバースタックトレース:
[0]で再スローされた例外:
認証された応答に制限はありますか?ASP.NET設定に制限はありますか?
c# - WCF での「認識されないシーケンス」メッセージによる CommunicationException
WCF サービスの使用中に CommunicationException が発生します。メッセージは次のとおりです。
リモート エンドポイントは、このシーケンスを認識しなくなります。これは、リモート エンドポイントでの中止が原因である可能性が最も高いです。wsrm:Identifier の値は、既知のシーケンス ID ではありません。信頼できるセッションに障害が発生しました。
コントラクト メソッドが呼び出された直後に例外がスローされます。コントラクト メソッドを呼び出す前は、チャネルの状態は Opened です。この例外をキャッチした後、サービス クライアントを復元すると、しばらくの間正常に動作します。しかし、その後、このエラーが再び発生します。タイムアウトを超えているようですが、どれが正確かわかりません。
私は、reliableSession を有効にして wsHttpBinding を使用しています。InactivityTimeout は 30 分に設定されており、例外が先にスローされるため、それを超えていないと確信しています。
wcf - WCFに関する奇妙なエラー-System.ServiceModel.CommunicationExceptionが処理されませんでした
簡単なWCFデモを作成しました:サーバー側:
クライアント側:
次に、ServerSideを実行します。CLientSideを実行しようとすると、次のエラーメッセージが表示されます。http:// locahost:8000 / HelloIndigo/HelloIndigoService へのHTTP応答の受信中にエラーが発生しました。これは、HTTPプロトコルを使用していないサービスエンドポイントバインディングが原因である可能性があります。これは、サーバーによってHTTP要求コンテキストが中止されたことが原因である可能性もあります(おそらくサービスのシャットダウンが原因です)。詳細については、サーバーログを参照してください。
そしてエラーの詳細:
.net - System.Net.WebException: 要求は中止されました: 要求はキャンセルされました
負荷条件下でこのエラーが発生する WCF サービスがあります (それ以外の場合はエラーを再現できないようです)。私たちは、そのような運がないので、約1週間それを回避する方法を見つけようとしています..
表示されるエラーには 2 つの部分があります。
System.ServiceModel.CommunicationException: エラー: (要求は中止されました: 要求は取り消されました。) http チャネル経由でデータを送信中に発生しました。
と:
System.Net.WebException: 要求は中止されました: 要求はキャンセルされました。
Reference.cs
ファイル内のメソッドをオーバーロードして を設定することでキープアライブの使用を無効にすることを多くの人が提案しているのを見てきましたがKeepAlive = false
、クライアント側は (Web 参照に加えて) サービス参照を使用しており、このオプションはもう存在しません。
私が見た別のオプションは、BasicHttpBinding
現在使用しているのではなく、サービスにカスタム Binding を追加することでしたが、これは、webReference を使用していた人への webservice の後方サポートを煩わしくします ( CustomBinding
SOAP が有効になっていないため)。
以前にこのエラーに対処した人はいますか? サーバー側に影響を与えずに WCF でキープアライブを無効にする方法はありますか? このエラーを引き起こすことが知られている他のものはありますか?
jsf - JavaEE6:データベースがシャットダウンしたときにWebアプリケーションを保護する方法
まず、私のフレームワークは、JSF、マネージドBean、EJB、およびJPAを備えたJavaEE6です。データベースから情報を照会する簡単なプログラムを作成します。したがって、ボタンをクリックすると、マネージドBeanへのイベントがトリガーされ、イベントリスナーメソッドがEJBメソッドにアクセスします。EJBメソッドはselect
、エンティティに対して単純なクエリを実行します。Iの前またはその間にデータベースがシャットダウンされた場合select
、例外が発生します
この例外からどのように保護しますか?間違いなくtry, catch
ここにありますが、どこに置くかはわかりません。em.createNamedQuery
またはを実行em.remove
すると、キャッチしようとしcom.mysql.jdbc.exceptions.jdbc4.CommunicationsException
ますが、次のようなエラーが発生しましたException com.mysql.jdbc.exceptions.jdbc4.CommunicationsException is never thrown in body of corresponding try statement
。
以下は私のコードです、どこで例外をキャッチしますか?
これは私のEJB
これは私のManagedBean
編集
以下にリストされているように両方の方法を試しますが、firebugで500ではなく200のステータスを返します
また
これがsetDisplayFacility()です
jdbc - java.io.EOFException による通信リンク障害
私の webapp は Tomcat 5.5 で実行されており、web.xml でデータソースを宣言しました。
context.xml (Tomcat conf):
データベースはMySql 5.0です。数時間の「未使用」の後、最初のアクセスでこの例外が発生する場合があることを除いて、すべてが正常に機能します。
リフレッシュする必要があり、再びうまく機能します。何か案が?ありがとう。
wcf - WCF CommunicationException を解決する方法が未処理でした
いくつか問題があります。
問題はCommunicationException
エラーです。
エラーメッセージは
http://localhost:18080/WCFServices/TestServiceへの HTTP 応答の受信中にエラーが発生しました 。これは、サービス エンドポイント バインディングが HTTP プロトコルを使用していないことが原因である可能性があります。これは、HTTP 要求コンテキストがサーバーによって中止されたことが原因である可能性もあります (サービスのシャットダウンが原因である可能性があります)。詳細については、サーバー ログを参照してください。
ソースコードの下に書きました。
エラー メッセージは、傾斜ワードの上に表示されます。
メイン アプリケーションとクライアント アプリケーションを同期させたい。
上記のエラーはクライアント アプリケーションです。
私のapp.configファイルは
ps。TestService は一時的に変更されます
誰かお願いします。
ありがとう。
申し訳ありませんが、「電圧」でエラーが発生しました
maxsize と length を増やしてみました。
しかし、それはこの問題を解決しませんでした。
誰か助けて。
communicationexception - OpenJMS: コンテキストの作成が InvalideClassException で失敗する
NetBeans 6.9.1 で OpenJMS を使用しています。簡単な NetBeans プラットフォーム アプリケーションとその中にモジュールを作成しました。startup.bat ファイルを使用して openjms-0.7.7-beta を開始しました。モジュール内で次のコードが実行され、トピックに関するメッセージのリッスンが開始されます。
コードは単純な Java アプリケーションでは完全に機能しましたが、この構成では行で失敗します。
ここに例外があります
このクライアント コードは、「org.exolab.jms.server.net.RemoteNamingProvider__Proxy」クラスのオブジェクトを openJMS サーバーに送信しているように見えます。このクラスは、コードと openJMS サーバーの両方で使用される同じ JAR ファイルにあります。ただし、何らかの奇妙な理由で、コンパイラーはサーバー側でクラスのシリアル ID が異なります。
インターネットで手がかりを探しました。異なるコンパイラを使用すると、クラスのシリアル ID が異なる場合があります。openJMS サーバーが、コンピューターにインストールされている Java SE コンパイラー以外のコンパイラーを使用しているかどうかわかりません。ただし、NetBeans がこのクライアント コードのコンパイルにそれ (Java SE コンパイラ) を使用していることは確かです。
第 2 に、シリアル ID を例外の原因となるクラスに明示的に割り当てることはできません。これは、自分のクラスではなく openJMS ライブラリにあるためです。
どんな助けでも大歓迎です。
-Hadaytullah