私は現在、Windows Server 2008 R2 Datacenter x64 VM 上の IIS 7.5 でホストされている WCF サービス (.Net 4.0) として公開されているサービスを使用して、SOA アーキテクチャでアプリケーションを開発しています (実際には、Amazon EC2 の m1.small インスタンスです)。 )。これらのサービスはマシン上でローカルに相互に通信するため、最適なパフォーマンスを得るために netNamedPipeBinding を使用するように設定しました。インスタンス化モードは呼び出しごとで、同時実行は複数に設定されています。
現在、200 ミリ秒から 1 秒の間のチャネルを開くときに断続的な遅延が発生するという 2 つの問題に直面しています。
WCF トレースを有効にしましたが、遅延が次のいずれかのエラーとして現れることがわかりました。
System.IO.PipeException: パイプへの書き込み中にエラーが発生しました: パイプを閉じています。(232、0xe8)。
その後、WCF が再試行され、正常に接続されたように見えます (したがって、遅延が発生します)。2 番目の症状は、アクティビティの実行時に 0.5 秒の遅延が発生することです。
処理アクション「http://tempuri.org/IConnectionRegister/ValidateUriRoute」
これについて私が見つけた唯一のことは、TCP ポート共有に関連している可能性があると考える人がいるということですが、私は名前付きパイプを使用しています。TCP ポート共有サービスを無効にしようとしましたが、違いはありませんでした。
興味深いことに、同じランダム ポートの localhost でリッスンする net.tcp を使用するようにすべてのエンドポイントを変更しようとしましたが、ValidateUriRouteアクティビティ内で 0.5 秒の遅延が断続的に発生しました。
私の WCF 構成は次のようになります。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="false">
<serviceActivations>
<add relativeAddress="ConfigurationHost.svc" service="Core.ConfigurationHost" factory="Core.ConfigurationHostFactory" />
<add relativeAddress="RoutingHost.svc" service="Core.RoutingHost" factory="Core.RoutingHostFactory" />
<add relativeAddress="AuthenticationHost.svc" service="Core.AuthenticationHost" factory="Core.AuthenticationHostFactory" />
</serviceActivations>
</serviceHostingEnvironment>
<services>
<service name="Core.ConfigurationHost"
behaviorConfiguration="Unthrottled">
<endpoint address="net.pipe://localhost/ConfigurationHost.svc"
binding="netNamedPipeBinding"
bindingConfiguration="customNetNamedPipeBinding"
contract="Core.IConfiguration" />
</service>
<service name="Core.RoutingHost"
behaviorConfiguration="Unthrottled" >
<endpoint address="net.pipe://localhost/RoutingHost.svc"
binding="netNamedPipeBinding"
bindingConfiguration="customNetNamedPipeBinding"
contract="Core.IRouting" />
</service>
<service name="Core.AuthenticationHost"
behaviorConfiguration="Unthrottled">
<endpoint address="net.pipe://localhost/AuthenticationHost.svc"
binding="netNamedPipeBinding"
bindingConfiguration="CustomNetNamedPipeBinding"
contract="Core.IAuthentication" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Unthrottled">
<serviceThrottling maxConcurrentCalls="100"
maxConcurrentSessions="100"
maxConcurrentInstances="100" />
</behavior>
</serviceBehaviors>
</behaviors>
<client>
<endpoint address="net.pipe://localhost/ConfigurationHost.svc"
binding="netNamedPipeBinding"
bindingConfiguration="customNetNamedPipeBinding"
contract="Core.IConfiguration"
name="Configuration" />
<endpoint address="net.pipe://localhost/RoutingHost.svc"
binding="netNamedPipeBinding"
bindingConfiguration="customNetNamedPipeBinding"
contract="Core.IRouting"
name="Routing" />
<endpoint address="net.pipe://localhost/AuthenticationHost.svc"
binding="netNamedPipeBinding"
bindingConfiguration="customNetNamedPipeBinding"
contract="Core.IAuthentication"
name="Authentication" />
</client>
<bindings>
<netNamedPipeBinding>
<binding name="customNetNamedPipeBinding"
maxReceivedMessageSize="2147483647"
sendTimeout="00:00:30"
receiveTimeout="infinite"
closeTimeout="00:00:30"
openTimeout="00:00:30"
maxConnections="500">
<security mode="None"/>
<readerQuotas maxDepth="200"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</netNamedPipeBinding>
</bindings>
</system.serviceModel>