私のアプリケーションでは、同期中の Winform UI スレッドが WCF メソッドを呼び出します。99.99% の場合は問題ありませんが、WCF メソッドの呼び出しがロックされ、UI がフリーズすることがあります。
呼び出しを非同期にすることで UI のフリーズを防ぐことができることはわかっていますが、WCF 呼び出しのほとんどは非同期ですが、この特定の小さなメソッドを同期させることはそれほど悪くないと考えました。
WCF サービスでロックが発生すると、他のユーザーもサービスにアクセスできなくなります。問題を解決するには、WCF サービス ホスト (Windows サービス) を再起動する必要があります。
WCF サービスがロックされてアクセスできなくなるのはどうしてですか?
シナリオが思いつきません。
通常どおり実行されているデータベースを確認しました。
技術的な詳細: サービス エージェントでプロキシを使用します。このサービス エージェントとそのプロキシは、アプリケーションの実行中も維持されます。
[PreserveReferences]
[OperationContract(IsOneWay = false, AsyncPattern = false, Action = "MyMethod")]
MyType MyMethod();
使用中のバインディング:
<wsHttpBinding>
<binding name="AppWsHttpBindingConfig" transactionFlow="true" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession ordered="false" enabled="false" />
<security mode="Message">
<message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>