Como posso dividir cadeias de conexão para um site do IIS, mas manter uma pasta de aplicativos compartilhada?

1

Neste momento, temos uma configuração como esta para o nosso negócio:

- App pool 1
 - Site 1
- App pool 2
 - Site 2
- App pool 3
 - Site 3

Corresponde a:

C:\inetpub\Site
C:\inetpub\Site2
C:\inetpub\Site3strings)
C:\inetpub\Site4

E assim por diante. Isso é irritante, pois nosso código precisa ser mantido em várias pastas, e as pessoas muitas vezes esquecem de fazê-lo; Esse é um problema que pode ser corrigido, mas eu prefiro resolvê-lo na solução e não no processo. O código em todas as pastas é idêntico, apenas os arquivos web.config são diferentes.

A razão pela qual temos nossos sites divididos dessa maneira, apesar do código .NET idêntico, é que precisamos de diferentes cadeias de conexão para diferentes servidores. Dessa forma, qualquer site que hospede a ligação recebe o tráfego. É assim que lidamos com balanceamento de carga, que não é a maneira mais bonita, mas faz o trabalho.

Eu prefiro sites MÚLTIPLOS (com um ou vários pools de aplicativos, não importa) que funcionem da mesma maneira, mas funcionem com UMA pasta de código compartilhado. O que eu preciso é uma solução para manipular as seqüências de conexão com base no site no IIS. Eu não tive muita sorte olhando para diretórios virtuais, o que parecia simples, mas eu não acho que é possível, pois ele precisa de um web.config para saber onde procurar diretórios virtuais.

Tenho certeza de que estou sentindo falta de algo simples aqui, mas preciso de uma pequena ajuda para isso:

C:\inetpub\SiteMaster (contains all .NET code)
C:\inetpub\SiteMaster\Site1_Config (only needs to tell me the connection strings)
C:\inetpub\SiteMaster\Site2_Config (only needs to tell me the connection strings)
C:\inetpub\SiteMaster\Site3_Config (only needs to tell me the connection strings)
    
por jski 10.08.2015 / 21:27

1 resposta

1

Uma opção é alterar seu código e usar um único método centralizado para acessar as sequências de conexão. Ali, dependendo do site, você retorna a string correta para o site. Você ainda pode ter todas as informações em um único web.config, mas a string de conexão principal não teria o banco de dados codificado. Seria adicionado mais tarde.

Dependendo da estrutura do seu código, pode ser muito trabalhoso.

A maneira mais fácil seria armazenar as strings de conexão no web.config raiz, em vez do web.config do seu site.

Você teria um único site com um único web.config, mas sem uma string de conexão.

Eles estão em:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

ou qualquer versão do framework que seu pool de aplicativos esteja usando.

Você pode usar o nó do local para especificar diferentes sequências de conexão para os diferentes sites:

<location path="Site">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site" name="SiteCS" />
    </connectionStrings>
</location>
<location path="Site2">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site2" name="SiteCS" />
    </connectionStrings>
</location>
<location path="Site3">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site3" name="SiteCS" />
    </connectionStrings>
</location> 

Você pode fazer o mesmo para outras configurações do IIS e do Dot.NET.

A desvantagem pode ser que você tenha que ser um administrador para alterar essas configurações e que, se as alterar, todos os pools de aplicativos no servidor poderão ser reiniciados.

    
por 11.08.2015 / 05:36