DLL per interoperabilita SISTRI e VS

Andare in basso

DLL per interoperabilita SISTRI e VS

Messaggio  Input il Ven Dic 13, 2013 3:05 pm

Ciao a tutti,

grazie alle vostre indicazioni sono riuscito a collegarmi con un'applicazione scritta con VS 2008 al SISTRI. Adesso pero' per esigenze di interfacciamento volevo non creare un'applicazione ma una DLL che mettesse a disposizione i metodi necessari ad interrogare il SISTRI.
Qualcuno di voi sa se e' possibile passare il file app.config anche ad una DLL? ci sto sbattendo la testa da qualche giorno e non riesco a capire se e' fattibile e sono io che sbaglio oppure se non e' possibile. Nel caso non fosse possibile secondo voi e' possibile passare dinamicamente le varie voci di app.config??

Scusate ma sono abbastanza neofita di VS.

Grazie
Input
avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

Re: DLL per interoperabilita SISTRI e VS

Messaggio  riccardock il Ven Dic 13, 2013 4:06 pm

Sì, basta definire una configSection nell'app.config che indichi una classe derivata da ConfigurationSection, in cui le proprietà abbiamo l'attributo ConfigurationProperty che indichi il nome delle proprietà. Ad esempio una classe così definita:

namespace MyNamespace {
public class MyConfig : ConfigurationSection {
[ConfigurationProperty ("myProperty")]
public string MyProperty {
get { return (string) base ["myProperty"]; }
set { base ["myProperty"] = value; }
}
}
}

La dichiari nell'app.config così:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="myConfigSection" type="MyNamespace.MyConfig, MyAssemblyName"/>
</configSections>
<myConfigSection myProperty="myValue" />
</configuration>


Per recuperare i valori è sufficiente una cosa del genere:

public void TestConfig () {
MyConfig myConfig = (MyConfig) ConfigurationManager.GetSection ("myConfigSection");
Console.WriteLine (myConfig.MyProperty);
}




Input ha scritto:Ciao a tutti,

grazie alle vostre indicazioni sono riuscito a collegarmi con un'applicazione scritta con VS 2008 al SISTRI. Adesso pero' per esigenze di interfacciamento volevo non creare un'applicazione ma una DLL che mettesse a disposizione i metodi necessari ad interrogare il SISTRI.
Qualcuno di voi sa se e' possibile passare il file app.config anche ad una DLL? ci sto sbattendo la testa da qualche giorno e non riesco a capire se e' fattibile e sono io che sbaglio oppure se non e' possibile. Nel caso non fosse possibile secondo voi e' possibile passare dinamicamente le varie voci di app.config??

Scusate ma sono abbastanza neofita di VS.

Grazie
Input
avatar
riccardock
Membro della community

Messaggi : 33
Data d'iscrizione : 08.11.13

Torna in alto Andare in basso

Re: DLL per interoperabilita SISTRI e VS

Messaggio  Input il Lun Dic 16, 2013 12:36 pm

Ok grazie.
Così dovrei riuscire a passare alcune proprietà leggendole dal app.config forse però mi sono espresso male nel primo post.
Il mio problema è fare in modo che anche con la DLL venga letto l'intero file app.config.
Se creo un'applicazione Windows con le indicazioni recuperate su questo forum e con il file app.config opportunamente modificato riesco ad interrogare il SIS mentre se il progetto è una DLL quando eseguo questo codice "Dim sisCLI = New ServiceReference1.SIS_WSDLClient()"  ottengo in seguente messaggio di errore:

Impossibile trovare l'elemento endpoint predefinito che fa riferimento al contratto 'ServiceReference1.SIS_WSDL' nel servizio di configurazione client ServiceModel. È possibile che non sia stato trovato nessun file di configurazione per l'applicazione o che nell'elemento client non sia stato trovato un elemento endpoint corrispondente al contratto.

..è per questo che chiedevo come fare a far leggere correttamente il file app.config ad una DLL.
Oppure sto sbagliando strada??  :-)

grazie
Input
avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

Re: DLL per interoperabilita SISTRI e VS

Messaggio  riccardock il Lun Dic 16, 2013 4:20 pm

Ah ok.
Il file di configurazione viene letto in automatico anche dalle DLL, ovviamente in deploy si deve chiamare come la dll ma con estensione aggiunta .config, tipo myLib.dll.config
Quell'errore, come dice il messaggio, può dipendere dalla mancanza o dall'errata compilazione del tag <system.serviceModel> con le sue apposite sezioni. In pratica devi fare il copia e in colla di tutto il nodo serviceModel dall'eseguibile alla dll.
Poi devi fare attenzione al nome del contratto: la sezione <client> del serviceModel contiene gli "endpoint", ogni endpoint ha un attributo "contract" il cui valore deve coincidere con la proprietà "ConfigurationName" dell'attributo "ServiceContractAttibute" che WCF applica all'interfaccia SIS_WSDL quando crea la Service Reference, tipo:

[System.ServiceModel.ServiceContractAttribute(Namespace="http://www.sistri.it/SIS_WSDL/", ConfigurationName="Service.SIS_WSDL")]
public interface SIS_WSDL {
...
}

In questo caso il contratto si chiama "Service.SIS_WSDL".
A me è capitato lo stesso problema facendo copia e incolla del nodo serviceModel da un altro progetto perché ho usato un nome diverso nella creazione del servizio remoto del SIS.




Input ha scritto:Ok grazie.
Così dovrei riuscire a passare alcune proprietà leggendole dal app.config forse però mi sono espresso male nel primo post.
Il mio problema è fare in modo che anche con la DLL venga letto l'intero file app.config.
Se creo un'applicazione Windows con le indicazioni recuperate su questo forum e con il file app.config opportunamente modificato riesco ad interrogare il SIS mentre se il progetto è una DLL quando eseguo questo codice "Dim sisCLI = New ServiceReference1.SIS_WSDLClient()"  ottengo in seguente messaggio di errore:

Impossibile trovare l'elemento endpoint predefinito che fa riferimento al contratto 'ServiceReference1.SIS_WSDL' nel servizio di configurazione client ServiceModel. È possibile che non sia stato trovato nessun file di configurazione per l'applicazione o che nell'elemento client non sia stato trovato un elemento endpoint corrispondente al contratto.

..è per questo che chiedevo come fare a far leggere correttamente il file app.config ad una DLL.
Oppure sto sbagliando strada??  :-)

grazie
Input
avatar
riccardock
Membro della community

Messaggi : 33
Data d'iscrizione : 08.11.13

Torna in alto Andare in basso

Re: DLL per interoperabilita SISTRI e VS

Messaggio  Input il Mer Dic 18, 2013 12:31 pm

riccardock ha scritto:Ah ok.
Il file di configurazione viene letto in automatico anche dalle DLL, ovviamente in deploy si deve chiamare come la dll ma con estensione aggiunta .config, tipo myLib.dll.config

Sto diventando matto con questo errore..ho visto che il file myLib.dll.config effettivamente viene creato ma come posso fare per capire se lo sta leggendo?
Anzichè far leggere il serviceModel e la sezione client dal file .config non esiste un modo per inserire i valori opportuni nel codice?


Grazie mille
Input
avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

Re: DLL per interoperabilita SISTRI e VS

Messaggio  Input il Gio Dic 19, 2013 12:34 pm

Risolto!!!
Se puo servire a qualcuno posto qui sotto il codice VB.net
In pratica visto i problemi che avevo nel far leggere il file di configurazione alla DLL sono riuscito ad istanziare quanto necessario direttamente nel codice visto che in teoria i parametri del SIS non dovrebbero cambiare tutti i giorni  Laughing 

ecco il codice:

Dim binding As BasicHttpBinding = New BasicHttpBinding(BasicHttpSecurityMode.None)
binding.Name = "SIS_WSDL"
binding.CloseTimeout = TimeSpan.Parse("00:01:00")
binding.OpenTimeout = TimeSpan.Parse("00:01:00")
binding.ReceiveTimeout = TimeSpan.Parse("00:10:00")
binding.SendTimeout = TimeSpan.Parse("00:01:00")
binding.AllowCookies = False
binding.BypassProxyOnLocal = False
binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard
binding.MaxBufferSize = 2147483647
binding.MaxBufferPoolSize = 2147483647
binding.MaxReceivedMessageSize = 2147483647
binding.MessageEncoding = WSMessageEncoding.Text
binding.TextEncoding = Encoding.UTF8
binding.TransferMode = TransferMode.Buffered
binding.UseDefaultWebProxy = True
binding.ReaderQuotas.MaxDepth = 32
binding.ReaderQuotas.MaxStringContentLength = 2147483647
binding.ReaderQuotas.MaxArrayLength = 2147483647
binding.ReaderQuotas.MaxBytesPerRead = 2147483647
binding.ReaderQuotas.MaxNameTableCharCount = 2147483647
binding.Security.Mode = BasicHttpSecurityMode.Transport
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None
binding.Security.Transport.Realm = ""
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName

Dim EndpointAddress As EndpointAddress = New EndpointAddress(New Uri "https://sisssl.sistri.it/SIS/services/SIS/"))

sisCLI = New sistri.ServiceReference1.SIS_WSDLClient(binding, EndpointAddress)

grazie per l'aiuto

ciao
Input
avatar
Input
Utente Attivo

Messaggi : 72
Data d'iscrizione : 20.04.11

Torna in alto Andare in basso

Re: DLL per interoperabilita SISTRI e VS

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum