Salve,sto sviluppando un controllo windows che dovrà accedere allo scanner (tramite il componente COM WIA) e che dovrà essere utilizzato all'interno di una pagina web all'interno della LAN.
Premetto che il sito è nel gruppo trusted sites di IE8.
Il problema è che il componente, quando cerca di accedere all'oggetto WIA, genera un'eccezione:
Richiesta di autorizzazione di tipo 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken={...}' non soddisfatta
Ho provato ad aggiungere nell'AssemblyInfo del controllo che sto sviluppando gli attributi AllowPartiallyTrustedCallers e SecurityPermission.
Con il secondo il controllo non viene proprio caricato nella pagina html :(
Qualcuno mi può dare una dritta?
Grazie
Potrebbe essere un problema di condivisione di assembly over LAN. In base al framework che stai usando, potresti provare ad impostare qualche parametro di sicurezza nella configurazione del .Net Framework.
Net 1.1/2.0:
http://msdn.microsoft.com/it-it/library/2bc0cxhc.aspx
.Net 4.0 (ricorda che il 3.5 è solo un upgrade del 2.0!)
http://msdn.microsoft.com/it-it/library/dd233103.aspx
Ti consiglio anche questi link:
http://technet.microsoft.com/it-it/library/bb457006(en-us).aspx
http://www.west-wind.com/Weblog/posts/275.aspx
In particolare nell'ultimo viene mostrato l'utilizzo di una utlity di nome caspol che è ideata proprio per impostare le policy relative alla sicurezza over the network.
Capisc e dotnet tu? No! E allor che parl a fà!
Grazie per i link che mi hai fornito ma purtroppo non riesco a risolvere il problema.Inizialmente ho sviluppato il controllo utilizzando la versione 4 del .NET framework, ma con tale versione il controllo non veniva nemmeno scaricato dal server nella cache locale dei downloaded file del client:ho provato con gacutil /ldl.
Ho cambiato la versione del framework portandola a 2.In questo caso vengono generati 2 file e tutti e due vengono scaricati nella cache:questi file sono il file relativo al controllo e il file interop per il componente COM referenziato nel progetto.Il risultato è che la pagina html riesce a caricare l'oggetto, ma genera un eccezione quando cerca di accedere all'oggetto COM.Come mi hai suggerito tramite uno dei link che hai postato ho provato a utilizzare l'utility caspol in questo modo:C:\>caspol -machine -addgroup 1 -url file://localhost/* FullTrust -name Localhost_Zone -pp off
ma nulla è cambiato.
Quando esegui il comando caspol ti solleva qualche errore?
manu71:C:\>caspol -machine -addgroup 1 -url file://localhost/* FullTrust -name Localhost_Zone -pp off
Prova a modificare in questo modo file://localhost/* --> \\nomemacchina\folder\*
Qual'è l'errore (inner excpetion) generato dall'oggetto COM?
Aggiungo anche questa info: http://coolwebdeveloper.com/2009/07/apps-running-from-network-share-run-under-full-trust-in-net-35-sp1/
Ho provato ad utilizzare \\nomecomputer\... ma senza buoni risultati.
La inner exception invece non la riesco a recuperare e questo di seguito è l'errore copiato direttamente da IE:
Messaggio: Richiesta di autorizzazione di tipo 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' non soddisfatta.
Il codice del componente è molto banale:
try { WIA.CommonDialog wiaDialog = new WIA.CommonDialog();} catch(System.Security.SecurityException sex) { string message = string.Format("Security Exception: {0} {1} {2} {3} {4} {5} {6}", sex.Demanded, sex.DenySetInstance, sex.FailedAssemblyInfo, sex.FirstPermissionThatFailed, sex.PermissionState, sex.PermissionType, sex.RefusedSet); MessageBox.Show(message);} catch (Exception ex) { MessageBox.Show(string.Format("Exception: {0}{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace));}
credo che l'errore venga generato prima, al momento in cui viene istanziato il componente, e infatti le message box contenenti l'errore non vengono visualizzate.
Associazione Culturale DotNetCampania - C.F.: 95127870632