1

これが問題です...私はこの問題に長い間取り組んできましたが、運がありませんでした

IISでホストされているWCFサービスがあり(コンソールホストでも試しましたが、同じ動作が得られます)、scvutilで作成したプロキシを介して呼び出しますが、数回(非常に少数の呼び出し)後にサービスが応答しません。

しかし、ここにいくつかの手がかりがあります:
1-それはテスト環境でのみ発生します(私の開発マシンでホストされているサービスでは発生しません)、数字!
2-サービスを非同期で呼び出します(client.MyServiceAsync)
3-これは最もトリッキーなものです...何が起こっているかを確認するためにフィドラーを実行すると、クライアントは機能し、失敗することはありません。クライアント)

私は今のところ何が起こっているのか分かりません。サーバー(Win2003)には、それ以上の接続をブロックするある種の「ディフェンダー」があるのではないかと思い始めましたが、それは可能でしょうか?非同期呼び出しを使用しているため、実際にはサーバーから応答を受け取った後、すべての呼び出しの後にクライアントを閉じると言ったときは、私を信頼してください。

ヒントやアドバイスをいただければ幸いです。よろしく、

編集:これは有用な情報になると思いました:運が悪かったので、両端でトレースを有効にしました。
サーバー側では接続が行き来しているのがわかります...そしてある時点で接続が来なくなります。クライアント側では、そのうちの1つがTimeoutExceptionをスローするまで接続が機能しているのがわかります...これですべてです

4

3 に答える 3

2

最善の策は、クライアントとサービスの両方でトレースを有効にして、制御の流れを確認することです。少なくとも、WCF によって実行されているアクションをある程度把握できます。

トレースの有効化に関する情報は次のとおりです: http://msdn.microsoft.com/en-us/library/ms733025.aspx

また、クライアント側とサーバー側のトレースを Service Trace Viewer ツールに読み込むことをお勧めします。これにより、相互に関連付けられたイベントを確認できます。そのツールの詳細と出力の読み方は次のとおりです: http://msdn.microsoft.com/en-us/library/aa751795.aspx

そのツールは、この種のものをデバッグするために非常に貴重です。うまくいけば、何が起こっているのかすぐにわかるでしょう。

それでも必要な情報が表示されない場合は、メッセージ ログを試すこともできます (サービス トレース ビューアー ツールでもこれらのファイルを読み取ることができます)。

ただし、接続が適切に閉じられていないと考えて、正しい軌道に乗っていると思います。特に非同期操作では、気付かないうちにこれを行うのは簡単です。これは、終了リクエストが発生する前にクライアント オブジェクトを再作成していたときに発生しました。これにより、最初のオブジェクトではなく、2 番目のオブジェクトの接続を適切に閉じることができました。トレース ビューアーは、これをすぐに指摘してくれました。

于 2009-05-21T14:30:27.683 に答える
2

わかりましたので、誰かが同じ問題に直面している場合に備えて、問題を修正する方法を次に示します。
非同期的に呼び出された私のサービスはストリームを返していましたが、このストリームはクライアントで破棄されていなかったため、プロキシは解放されていませんでした。

コメントありがとうございます。以前に聞いたことのない新しいものは何もなかったので、彼らは私を解決策に導きました。

于 2009-05-25T17:08:49.817 に答える
-1

WCF は、サービスの調整をサポートしています。これにより、同時に実行できるメッセージ/接続/インスタンスの数を制限できます。MSDN で ServiceThrottle を検索します。

次のように、アプリ構成で ServiceThrottle を指定します。

 <behaviors>
      <serviceBehaviors>
        <behavior  name="Throttled">
          <serviceThrottling 
            maxConcurrentCalls="1" 
            maxConcurrentSessions="2200" 
            maxConcurrentInstances="1"
          />
        </behavior>
      </serviceBehaviors>
    </behaviors>

スロットリングが問題であると思われる場合は、デバッガーまたはダンプで ServiceThrottle オブジェクトを探します。ダンプで cdb を使用する例を次に示します。

ダンプ サービス ホスト

0:000> !do 0000000001647fc0
Name: System.ServiceModel.ServiceHost
MethodTable: 000007feef98a7f0
EEClass: 000007feef352d60
Size: 248(0xf8) bytes
 (D:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
000007fef23d5918  400098a       4c       System.Boolean  1 instance                0 aborted
000007fef23d5918  400098b       4d       System.Boolean  1 instance                0 closeCalled
000007feef93aa00  400098c        8 ...ct+ExceptionQueue  0 instance 0000000000000000 exceptionQueue
000007fef23d6038  400098d       10        System.Object  0 instance 0000000001648188 mutex
000007fef23d5918  400098e       4e       System.Boolean  1 instance                0 onClosingCalled
000007fef23d5918  400098f       4f       System.Boolean  1 instance                0 onClosedCalled
000007fef23d5918  4000990       50       System.Boolean  1 instance                1 onOpeningCalled
000007fef23d5918  4000991       51       System.Boolean  1 instance                1 onOpenedCalled
000007fef23d5918  4000992       52       System.Boolean  1 instance                0 raisedClosed
000007fef23d5918  4000993       53       System.Boolean  1 instance                0 raisedClosing
000007fef23d5918  4000994       54       System.Boolean  1 instance                0 raisedFaulted
000007fef23d5918  4000995       55       System.Boolean  1 instance                1 traceOpenAndClose
000007fef23d6038  4000996       18        System.Object  0 instance 0000000001647fc0 eventSender
000007feef929a60  4000997       48         System.Int32  1 instance                2 state
000007fef23ce158  4000998       20  System.EventHandler  0 instance 0000000000000000 Closed
000007fef23ce158  4000999       28  System.EventHandler  0 instance 0000000000000000 Closing
000007fef23ce158  400099a       30  System.EventHandler  0 instance 0000000001648660 Faulted
000007fef23ce158  400099b       38  System.EventHandler  0 instance 0000000000000000 Opened
000007fef23ce158  400099c       40  System.EventHandler  0 instance 0000000000000000 Opening
000007fef23d5918  4002e78       56       System.Boolean  1 instance                1 initializeDescriptionHasFinished
000007feef981300  4002e79       58 ...meKeyedCollection  0 instance 00000000016481a0 baseAddresses
000007feef981500  4002e7a       60 ...patcherCollection  0 instance 0000000001648220 channelDispatchers
000007fef2416b80  4002e7b       c0      System.TimeSpan  1 instance 0000000001648080 closeTimeout
000007feef980e70  4002e7c       68 ...erviceDescription  0 instance 0000000001656e28 description
0000000000000000  4002e7d       70                       0 instance 0000000001648290 extensions
0000000000000000  4002e7e       78                       0 instance 0000000000000000 externalBaseAddresses
0000000000000000  4002e7f       80                       0 instance 000000000166cf80 implementedContracts
000007feef989770  4002e80       88 ...nceContextManager  0 instance 0000000001648300 instances
000007fef2416b80  4002e81       c8      System.TimeSpan  1 instance 0000000001648088 openTimeout
000007feef8e9890  4002e82       90 ...rformanceCounters  0 instance 0000000000000000 servicePerformanceCounters
000007feef98b708  4002e83       98 ...rformanceCounters  0 instance 000000000171c590 defaultPerformanceCounters
000007feef981a18  4002e84       a0 ...r.ServiceThrottle  0 instance 0000000001648340 serviceThrottle
000007feef980c20  4002e85       a8 ...erviceCredentials  0 instance 0000000001800ed0 readOnlyCredentials
000007feef980d58  4002e86       b0 ...orizationBehavior  0 instance 0000000001801240 readOnlyAuthorization
0000000000000000  4002e87       b8                       0 instance 0000000000000000 UnknownMessageReceived
000007fef53bc640  4002e77      f80           System.Uri  0   static 0000000001648110 EmptyUri
000007fef23d6038  40032cc       d0        System.Object  0 instance 00000000015be070 singletonInstance
000007fef23d8420  40032cd       d8          System.Type  0 instance 00000000016486a0 serviceType
000007feef981ee0  40032ce       e0 ...ontractCollection  0 instance 0000000001657468 reflectedContracts
000007fef23d1000  40032cf       e8   System.IDisposable  0 instance 0000000000000000 disposableInstance

ServiceHost のスロットル情報のダンプ

0:000> !do 0000000001648340
Name: System.ServiceModel.Dispatcher.ServiceThrottle
MethodTable: 000007feef981a18
EEClass: 000007feef34c2d8
Size: 72(0x48) bytes
 (D:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
000007feef981a90  400371d        8 ...cher.FlowThrottle  0 instance 00000000016484a8 calls
000007feef981a90  400371e       10 ...cher.FlowThrottle  0 instance 00000000016485d8 sessions
000007feef902140  400371f       18 ...her.QuotaThrottle  0 instance 0000000000000000 dynamic
000007feef981a90  4003720       20 ...cher.FlowThrottle  0 instance 0000000001779f80 instanceContexts
000007feef9808c8  4003721       28 ...l.ServiceHostBase  0 instance 0000000001647fc0 host
000007fef23d5918  4003722       38       System.Boolean  1 instance                1 isActive
000007fef23d6038  4003723       30        System.Object  0 instance 0000000001648410 thisLock

ダンプ セッション スロットリング情報

0:000> !do 00000000016485d8
Name: System.ServiceModel.Dispatcher.FlowThrottle
MethodTable: 000007feef981a90
EEClass: 000007feef34c390
Size: 64(0x40) bytes
 (D:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
000007fef23dd9b8  40034f5       30         System.Int32  1 instance             2220 capacity
000007fef23dd9b8  40034f6       34         System.Int32  1 instance             **2220 count
000007fef23d6038  40034f7        8        System.Object  0 instance 0000000001648618 mutex
000007fef23c4d70  40034f8       10 ...ding.WaitCallback  0 instance 0000000001648598 release
0000000000000000  40034f9       18                       0 instance 0000000001648630 waiters
000007fef23d6748  40034fa       20        System.String  0 instance 00000000016483c8 propertyName
000007fef23d6748  40034fb       28        System.String  0 instance 0000000001648550 configName
0:000>
于 2009-08-29T18:58:39.347 に答える