Domanda

Ho un sacco di servizi WCF self-hosted. bel lavoro di tutto, ma io sono cercare modi per normalizzare / semplificare la configurazione risultante. Ho semplificato il più possibile, ma non sono ancora contento. Attualmente, il mio aspetto di configurazione di questo tipo:

<system.serviceModel>
    <bindings>
        <netTcpBinding>
            <binding name="BindingConfiguration" ...>
                ...
            </binding>
        </netTcpBinding>
    </bindings>

    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                 ...
            </behavior>
        </serviceBehaviors>
    </behaviors>

    <services>
        <service behaviorConfiguration="ServiceBehavior" name="Name1">
            <endpoint address="net.tcp://localhost:8080/name1" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </service>
        <service behaviorConfiguration="ServiceBehavior" name="Name2">
            <endpoint address="net.tcp://localhost:8080/name2" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract2">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </service>
        ...
    </services>
</system.serviceModel>

In tutto, ho 6 servizi in modo che sia ripetitivo. Idealmente, mi piacerebbe:

  • Per specificare "localhost: 8080" solo una volta e condividere tra tutti i servizi, e specificare solo la differenza ( "nome1" o "nome2")
  • Specificare le informazioni di identità solo una volta e condividere tra tutte le definizioni di servizio

Per il mio primo punto, ho consapevole di indirizzi di base , ma che funziona solo a livello di servizio, e non tra servizi separati. Al secondo punto, ho provato a spostare le informazioni di identità in un comportamento di endpoint, ma che non sembra essere supportato.

C'è qualcosa che posso fare per semplificare questa configurazione? o è la mia unica opzione per passare a un approccio di configurazione basato su codice?

È stato utile?

Soluzione

Purtroppo, come avete notato voi stessi - il concetto indirizzo di base è solo a livello per-service -. Quindi se avete un sacco di punti finali per un determinato servizio, quindi è possibile utilizzarlo

L'unica opzione che realmente avrebbe dovuto è quello di utilizzare altri mezzi di configurare il vostro indirizzo di base, e quindi utilizzare tale per creare gli endpoint di servizio nel codice. Se si auto-host vostro servizio, si potrebbe fare questo nel codice ospite, prima di chiamare ServiceHost.Open() - Se ospitate in IIS, si dovrà creare il proprio ServiceHostFactory personalizzato che fa tutto questo setup, e quindi utilizzare tale servizio di accoglienza personalizzato fabbrica per creare i padroni di servizio in IIS.

Sia è fattibile con uno sforzo gestibile - domanda è se questo è vale la pena per te, ma non possiamo decidere che al tuo posto ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top