プロキシクラスを介してクライアントから呼び出される、WindowsサービスとしてホストされているWCFサービスがあります。プロキシクラスのメソッドは次のようになります。
public CustomerResponse GetCustomers(CustomerRequest request)
{
try
{
return Channel.GetCustomers(request);
}
catch (Exception ex)
{
throw ex;
}
}
GetCustomerは現在、データベースから約1000レコードを返します。問題はこれです:
私は4つの異なるPCでプログラムを実行しましたが、そのうちの2つでのみこのエラーが発生します。他の2つは問題なく、すべて同じ設定です
この問題が発生した2台のPCで、データベース内の顧客レコードの数を1000から200に減らすと、問題は解決しました。
設定ファイルで知っているすべての設定をすでに最大にしています
これは例外メッセージです
ソケット接続が中止されました。これは、メッセージの処理エラー、リモートホストによる受信タイムアウトの超過、または根本的なネットワークリソースの問題が原因である可能性があります。ローカルソケットのタイムアウトは「00:00:59.9863281」でした。
例外が1秒以内に返されるため、タイムアウトの問題ではないと確信しています。
これはサーバー上の私の設定ファイルです
<services>
<service name="CustomerService" behaviorConfiguration="DefaultBehaviour">
<endpoint address="CommonService" binding="netTcpBinding" bindingConfiguration="customTcpBinding"
contract="ICustomerService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8542/CustomerService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehaviour">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
そしてこれはMVCプロジェクトの設定ファイルです
<bindings>
<netTcpBinding>
<binding name="customTcpBinding" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
<security mode="None"/>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
</netTcpBinding>
</bindings>
<endpoint address="net.tcp://localhost:8542/CustomerService" binding="netTcpBinding" bindingConfiguration="customTcpBinding" contract="ICustomerService" name="NetTcpBinding_CustomerService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>