WCFサービスのタイムアウト値を増やす


133

WCFサービスでデフォルトのタイムアウトを1分より長くするにはどうすればよいですか?


明確ではありませんが、暗黙のうちに質問していると思いますが、サーバー側で、処理に1分以上かかる呼び出しをタイムアウトするように構成できるかどうかです。これは不可能です
gravidThoughts

回答:


196

サーバー側とクライアント側のどちらを指しますか?

クライアントの場合、バインディング要素のsendTimeout属性を調整する必要があります。サービスの場合、バインディング要素のreceiveTimeout属性を調整する必要があります。

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="longTimeoutBinding"
        receiveTimeout="00:10:00" sendTimeout="00:10:00">
        <security mode="None"/>
      </binding>
    </netTcpBinding>
  </bindings>

  <services>
    <service name="longTimeoutService"
      behaviorConfiguration="longTimeoutBehavior">
      <endpoint address="net.tcp://localhost/longtimeout/"
        binding="netTcpBinding" bindingConfiguration="longTimeoutBinding" />
    </service>
....

もちろん、目的のエンドポイントをその特定のバインディングにマップする必要があります。


エンドポイントタグ内で「bindingname」を使用してバインディングをマップするにはどうすればよいですか?
ブランクマン、

これは単に間違っているザ・receiveTimeoutセッションベースのバインディングのアイドルのサーバ側支配決意に。たとえば、サーバーはこの設定をbasicHTTPバインディングに使用しません。WCFの独自のサーバー側処理タイムアウトをロールする必要があります
gravidThoughts

45

Visual Studio 2008(または適切なWCFがインストールされている場合は2005)の[ツール]メニューの下に、[WCFサービス構成エディター]というオプションがあります。

そこから、クライアントとサービスの両方のバインディングオプションを変更できます。これらのオプションの1つはタイムアウト用です。


このツールは、要素を間違った方法でラップしたり、スペルを間違えたりするようなエラーを回避するのに最適な方法です。
markaaronky 2017

ログファイルを開く他のツールについては、こちらもご覧ください:stackoverflow.com/a/34283667/187650
juFo


8

次の2つの方法を選択できます。

1)クライアントのコード

public static void Main()
{
    Uri baseAddress = new Uri("http://localhost/MyServer/MyService");

    try
    {
        ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));

        WSHttpBinding binding = new WSHttpBinding();
        binding.OpenTimeout = new TimeSpan(0, 10, 0);
        binding.CloseTimeout = new TimeSpan(0, 10, 0);
        binding.SendTimeout = new TimeSpan(0, 10, 0);
        binding.ReceiveTimeout = new TimeSpan(0, 10, 0);

        serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);
        serviceHost.Open();

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

    }
    catch (CommunicationException ex)
    {
        // Handle exception ...
    }
}

2)WebサーバーのWebConfig

<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding openTimeout="00:10:00" 
                 closeTimeout="00:10:00" 
                 sendTimeout="00:10:00" 
                 receiveTimeout="00:10:00">
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

詳細は公式ドキュメントをご覧ください

バインディングのタイムアウト値の構成

クラスWSHttpBinding


0

バインディングタイムアウト(Timespan秒単位)に加えて、これも必要になる場合があります。これは秒単位です。

<system.web>
    <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.