2

WCF を使用して記述されたファイル転送サービスがあります。クライアントから送信されたファイルを受信します。クライアント インターンは、FileStream + MessageContract を使用してファイル全体に送信します。次の属性を使用して、WCF ファイル転送サービスをシングルトンとして作成しました

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
 ConcurrencyMode = ConcurrencyMode.Multiple)]

クライアント自体で複数のスレッドを使用しようとしています。各スレッドは channelfactory + proxy.CreateChannel のインスタンスを作成し、1 つの個別のファイルを介してサービスに送信します。一度に 1 つのファイルしか転送できないサービス側にも、クライアント側にもロックはありません。このコードは、状態の永続性を持たない一種のパススルー コードです。

私が直面している問題は、複数のファイルを送信しようとしている複数のスレッドが表示されないことです。複数のスレッドを使用して複数のファイルを転送しようとするたびに、サービスの種類は同じインスタンスで複数のファイルを受け入れません。これにより、ファイルが並列ではなく順次転送されます。クライアント側からはファイルが送信されているように感じますが、サービス側ではそのようなものが滞っています。

ServiceThrottling 属性を使用してみましたが、それでも違いは見つかりません。私がやっていることに何か問題がありますか、それともこの種のアプローチは有効ではありませんか?

1 つのクライアントは、1 つのチャネルで 1 つのファイルしか送信できませんか? 多数のスレッドが多数のファイルを同じサービスに送信することはできませんか? 誰か助けてください。

ありがとうサンディープ

4

2 に答える 2

0

クライアントでプロパティServicePointManager.DefaultConnectionLimitを 2 より大きい値に設定してみてください。

于 2013-05-20T09:59:42.290 に答える