DotNetCampania
Il primo portale campano dedicato allo sviluppo software con tecnologie Microsoft

Hosting controllo windows su IE 8

rated by 0 users
Answered (Not Verified) This post has 0 verified answers | 4 Replies | 2 Followers

Top 25 Partecipanti
15 Post
Punteggio 315
manu71 posted on 13 ago 2010 17:19

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

  • | Punteggio Post: 20

All Replies

Top 10 Partecipanti
Maschio
288 Post
Punteggio 3.802

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

Top 25 Partecipanti
15 Post
Punteggio 315

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.

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
288 Post
Punteggio 3.802

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/

 

Capisc e dotnet tu? No! E allor che parl a fà!

  • | Punteggio Post: 20
Top 25 Partecipanti
15 Post
Punteggio 315

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.

 

  • | Punteggio Post: 5
Pagina 1 di 1 (5 elementi) | RSS

Associazione Culturale DotNetCampania - C.F.: 95127870632

Powered by Community Server (Commercial Edition), by Telligent Systems