0

私はこのオブジェクトをどこに押し込むべきかを理解しようとしています:

ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior
{
    MaxConcurrentSessions = 100,
    MaxConcurrentCalls = 100,
    MaxConcurrentInstances = 100
};

これを web.config で構成する方法に関する情報を見つけましたが、それについて少し混乱しています。以前は、web.config に次のようなものがありました。

<service name="AuthenticationService.AuthenticationService" behaviorConfiguration="Development">
    <endpoint address="http://services.local/0.0.0.5/AuthenticationService.svc"
              binding="basicHttpBinding"
              bindingConfiguration="TUPSOAPBinding"
              contract="AuthenticationService.ServiceDomain.ISecurityService"
              name="SOAPCatalogService"  />
  </service>

それでもそれを使用していれば、web.config を介してスロットリングを構成する方法を正確に知ることができますが、これらすべてのエンドポイントを web.config から取り出すことができ、すべてが引き続き機能し、そうしなかったためメンテナンスが少なくなることがわかりました。バージョンや環境が異なる場合は、アドレスを更新する必要があります。

これをプログラムで ServiceHost に設定する方法に関する情報も見つけましたが、プログラムで ServiceHost を作成していません。IIS に任せています。

では、web.config を使用せずに ServiceHost を自分で作成することなく、スロットリングを設定するプログラムによる方法はありますか?

<service />編集:または、サービスごとにエントリを作成せずに web.config でこれを行う方法はありますか?

4

1 に答える 1

1

これを行う 1 つの方法は、.svc ファイルのマークアップを使用して、カスタム サービス ホストとカスタム サービス ホスト ファクトリを使用するよう IIS に指示することです。もちろん、これを行うには、カスタム サービス ホストが必要です。例えば:

using System;
using System.ServiceModel;
using System.ServiceModel.Description;

public class MyServiceHost : ServiceHost
{

    public MyServiceHost()
        : base() { }

    public MyServiceHost(Type serviceType, params Uri[] baseAddresses)
        : base(serviceType, baseAddresses) { }

    public MyServiceHost(object singletonInstance, params Uri[] baseAddresses)
        : base(singletonInstance, baseAddresses) { }

    protected override void OnClosing()
    {
        base.OnClosing();
    }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();
        this.Description.Behaviors.Add(new ServiceThrottlingBehavior
        {
            MaxConcurrentSessions = 100,
            MaxConcurrentCalls = 100,
            MaxConcurrentInstances = 100
        });
    }
}

上記のキー ポイントは、カスタム サービス ホストにApplyConfiguration()追加できるのオーバーライドです。ServiceThrottlingBehavior

IIS はServiceHostFactoryをインスタンス化するMyServiceHostために使用するため、次のようにカスタム サービス ホスト ファクトリも作成します。

public class MyServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, params Uri[] baseAddresses)
    {
        return new MyServiceHost(serviceType, baseAddresses);
    }
}

上記のコードは、カスタム サービス ホストの実際のインスタンスを作成します。

最後のステップは、.svc ファイルのマークアップを変更して、カスタム サービスのホストとファクトリを使用することです。

<%@ ServiceHost Langauge="C#" Service="MyCompany.MyService" 
    CodeBehind="MyService.svc.cs" Factory="MyCompany.MyServiceHostFactory" %>

サービス名はサービスの完全修飾名である必要があり、ファクトリもカスタム サービス ホスト ファクトリの完全修飾名である必要があります。

明らかに、カスタム サービス ホストに多くのものを追加できます (私たちには監視とエラー処理があります)。これは元々 .NET 3.5 で行われていたため、4.0/4.5 でこれを行う新しい方法または追加の方法がある可能性があります (たとえば、ファイルレス アクティベーションの構成ファイルでファクトリを指定できることは知っていますが、それは<system.serviceModel>避けたいと思われるセクション。)

于 2015-07-03T04:22:09.227 に答える