1

Windows サービスによってホストされている WCF サービスがあります。それは機能しますが、呼び出しは非常に遅いですvoid Test()。クライアント呼び出しからサーバー受信まで約 500 ミリ秒かかります。

いくつかの異なる構成を試しましたが、それを高速化することに成功しませんでした。クライアントとサーバーの両方が同じマシン上にあります。

コードは次のとおりです。

Shared.dll:

[ServiceContract]
public interface IContract
{
    [OperationContract]
    void Test();
}

Server.exe:

public class Service : IContract
{
    public void Test()
    {
        this.Log("Test: " + DateTime.Now.TimeOfDay);
    }
}

Client.exe:

var binding = ...;
var factory = new ChannelFactory<IContract>(binding, "net.tcp://localhost/Service");
var service = factory.CreateChannel();
this.Log("Test: " + DateTime.Now.TimeOfDay);
service.Test();

app.config:

<system.serviceModel>
  <services>
    <service behaviorConfiguration="ServiceBehavior" name="Server.Service">
      <endpoint address="Service" binding="netTcpBinding" bindingConfiguration="NetTcp" contract="Shared.IContract">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost/" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <bindings>
    <netTcpBinding>
      <binding name="NetTcp" portSharingEnabled="true">
        <security mode="None">
          <message clientCredentialType="None"/>
          <transport protectionLevel="None" clientCredentialType="None"/>
        </security>
        <reliableSession enabled="false" />
      </binding>
    </netTcpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

編集

私は現在、同じマシンのクライアントとサーバーでこれをテストしていますが、実稼働用にそれらを別のマシンに置くことを考えています。

ここでは、ファクトリとチャネルの作成が原因ではありません。Thread.Sleep(20000)作成とログの間にを入れることを除外したところ、同じ結果が得られました。

クライアント ログとサーバー ログの違いは、最初の呼び出しでは約 500 ミリ秒 (実際には 300 ミリ秒から 1 秒の間) ですが、それ以上の への呼び出しでは 5 ミリ秒未満続きますTest()。最初の呼び出しを含め、関数を常に非常に高速にしたいと考えています。どうやってやるの?

4

1 に答える 1