Domanda

Ho un servizio WCF che chiama, attraverso un BL, un Data Layer e in definitiva il back-end di SQL Server. Il mio servizio espone vari metodi / operazioni per estrarre i dati dal database. Ho anche creato un host per il test e un host del servizio Windows, che è il modo in cui prevedo di distribuirlo.

Ieri, quando ho fatto una distribuzione di prova, il servizio è iniziato bene, ma non ho avuto la possibilità di vedere se i dati venivano estratti correttamente. Ecco il punto: il mio ambiente di test di distribuzione (MS Server 2003) è completamente diverso dal mio ambiente di test locale (laptop). Ho distribuito copiando il contenuto bin \ debug del progetto del servizio Windows sul server e facendo riferimento lì .exe quando ho usato InstallUtil.exe. Ma la connessione dati per il DL dovrebbe richiedere una stringa di connessione diversa, ovviamente, poiché dovrebbe collegarsi al database sul server, non al mio laptop. Tuttavia, l'unica app.config che vedo nella directory in cui ho distribuito è quella per l'host del servizio. Gli altri progetti, come DL e BL, sono presenti anche come DLL, ma nessuna app.config per entrambi. Quindi, come posso sostituire app.config per il DL con quello corretto per quell'ambiente? Sono sicuro che si tratta di un semplice problema che non sto semplicemente chiarendo.

Una domanda correlata: se in seguito decidiamo di voler utilizzare un host HTTP anziché - o oltre a - TCP, posso eseguire un secondo host eseguendo lo stesso servizio? Devo solo distribuire l'host con IIS e aggiungere un nodo di servizio a app.configs?

È stato utile?

Soluzione

App.config per l'ambiente di hosting, in questo caso il servizio Windows gestito, contiene la configurazione per tutti i moduli. Allo stesso modo, Web.config contiene tutte le configurazioni se lo si ospita su IIS.

Altri suggerimenti

Quando si distribuisce un progetto, l'unica app.config / web.config che si otterrà è quella presente nel progetto eseguibile (sito Web / app console / servizio windows / app windows form / progetto ecc.). Qualsiasi app.configs per progetti DLL non verrà copiato nella directory bin.

Dovrai copiare le sezioni di configurazione dai tuoi progetti DLL e inserirle nel progetto di servizio app.config.

Per la tua seconda domanda, puoi ospitare endpoint diversi per lo stesso servizio nello stesso ServiceHost. È possibile ospitare un endpoint HTTP in un'app di servizio / console di Windows. Se si ospita HTTP al di fuori di IIS, potrebbe essere necessario concedere autorizzazioni all'utente per consentire l'apertura di una porta HTTP. (vedi http://msdn.microsoft.com/en-us/library/ ms733768.aspx ). Per HTTP la tua vita potrebbe essere più semplice per l'hosting in IIS, ma funziona in un semplice ServiceHost.

<system.serviceModel>
    <services>
        <service name="MyServiceTypes.MyService">
            <endpoint address="http://localhost:44444/MyService"
                      binding="basicHttpBinding"
                      contract="MyServiceTypes.IMyService" />

            <endpoint address="net.tcp://localhost:55555/MyService"
                      binding="netTcpBinding"
                      contract="MyServiceTypes.IMyService" />
        </service>
    </services>
</system.serviceModel>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top