Pergunta

Eu tenho um monte de serviços WCF auto-hospedados. Tudo está funcionando bem, mas estou procurando maneiras de normalizar/simplificar a configuração resultante. Eu simplifiquei o máximo possível, mas ainda não estou feliz. Atualmente, minha configuração é assim:

<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>

Ao todo, tenho 6 serviços, por isso é repetitivo. Idealmente, eu gostaria:

  • Para especificar "localhost: 8080" apenas uma vez e compartilhar entre todos os serviços e especificar apenas a diferença ("nome1" ou "name2")
  • Especifique as informações de identidade apenas uma vez e compartilhe entre todas as definições de serviço

Ao meu primeiro ponto, eu ciente endereços básicos, mas isso só funciona no nível de serviço, não em serviços separados. Para o meu segundo ponto, tentei mover as informações de identidade para um comportamento de endpoint, mas isso não parece ser suportado.

Existe algo que eu possa fazer para simplificar esta configuração? Ou minha única opção para mudar para uma abordagem de configuração baseada em código?

Foi útil?

Solução

Infelizmente, como você se notou - o conceito de endereço base está apenas em um nível por serviço - por isso, se você tiver muitos pontos de extremidade para um determinado serviço, poderá usá -lo.

A única opção que você realmente teria é usar alguns outros meios de configurar seu endereço base e, em seguida, usá -lo para criar os pontos de extremidade do serviço no código. Se você se auto-hospedar seu serviço, poderá fazer isso no seu código de host, antes de ligar ServiceHost.Open() - Se você hospeda no IIS, teria que criar seu próprio costume ServiceHostFactory que faz toda essa configuração e, em seguida, usa essa fábrica de host de serviço personalizada para criar seus hosts de serviço no IIS.

Ambos são factíveis com um esforço gerenciável - a pergunta é se isso vale o problema para você, mas não podemos decidir isso em seu lugar ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top