Pregunta

Tengo una biblioteca de clases compilada que contiene un control de usuario y me gustaría agregarla a una página web. Estoy agregando una etiqueta de objeto a la página html que se ve así:

 <OBJECT id="Main" classid="http://localhost/HelloWorld/Hello.World.dll#Hello.World.UserControl"></OBJECT>

Sin embargo, el control no se muestra. La DLL llega a mis archivos temporales y pongo en blanco el cuadro de objeto en la página web. Recibo un mensaje de error en mis archivos temporales de Internet que se ve así:

  

? FusionBindError! name = Hello.World.dll Hello.World.UserControl

No sé cómo depurar esto más. Me pregunto si es un problema de espacio de nombres.

[Editar]

El siguiente error terminó en el registro:

Creating security manager

Microsoft.IE.Manager: Microsoft.IE.Manager: unique id lgth = 42
Microsoft.IE.SecureFactory: Create SecureFactory() with security information
Microsoft.IE.Manager: Created secure factory
Microsoft.IE.SecureFactory: Creating instance of the object in the correct domain
Microsoft.IE.SecureFactory: pUrl = http://localhost/HelloWorld/
Microsoft.IE.SecureFactory: id = 86474707A31303E2234383E24333E2135330000000
Microsoft.IE.SecureFactory: link = 
Microsoft.IE.SecureFactory: licenses = 
Microsoft.IE.SecureFactory: deployment manifest = 
Microsoft.IE.SecureFactory: Security options = ZoneEvidence, SiteEvidence
Microsoft.IE.Manager: Url = http://localhost/HelloWorld/
Microsoft.IE.Manager: UrlGetPartW returned 0
Microsoft.IE.Manager: UrlGetPartW returned 80070057
Microsoft.IE.Manager: CodeBase = http://10.248.43.15
Microsoft.IE.Manager: Application = HelloWorld
Microsoft.IE.Manager: Found a codebase
Microsoft.IE.Manager: UrlCanonicalize returned 0
Microsoft.IE.SecureFactory: URL codeBase: http://localhost/
Microsoft.IE.SecureFactory: URL application: HelloWorld
Microsoft.IE.SecureFactory: Locating domain for http://localhost/
Microsoft.IE.IDKey: Created key
Microsoft.IE.Manager: The domain does not exist.
Microsoft.IE.IDKey: Created key
Microsoft.IE.Manager: The domain does not exist.
Microsoft.IE.SecureFactory: Need to create domain
Microsoft.IE.SecureFactory: Application base: http://localhost/
Microsoft.IE.SecureFactory: Private Bin Path: bin
Microsoft.IE.IDKey: Created key
Microsoft.IE.SecureFactory: Trying to create instance of type http://localhost/HelloWorld/Hello.World.dll#Hello.World.Main
Microsoft.IE.SecureFactory: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'ComponentFactory.Krypton.Toolkit.KryptonManager' threw an exception. ---> System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
   at System.Windows.Forms.ToolStripManager.set_Renderer(ToolStripRenderer value)
   at ComponentFactory.Krypton.Toolkit.KryptonManager.b()
   at ComponentFactory.Krypton.Toolkit.KryptonManager..cctor()
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.UIPermission
The first permission that failed was:
<IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Window="AllWindows"/>

The demand was for:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Window="AllWindows"/>
</PermissionSet>

The granted set of the failing assembly was:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.FileDialogPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Access="Open"/>
<IPermission class="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Allowed="ApplicationIsolationByUser"
UserQuota="512000"/>
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Execution"/>
<IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Window="SafeTopLevelWindows"
Clipboard="OwnClipboard"/>
<IPermission class="System.Security.Permissions.SiteIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Site="localhost"/>
<IPermission class="System.Security.Permissions.UrlIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Url="http://localhost/HelloWorld/Hello.World.dll"/>
<IPermission class="System.Security.Permissions.ZoneIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Zone="Internet"/>
<IPermission class="System.Drawing.Printing.PrintingPermission, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Level="SafePrinting"/>
<IPermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1">
<ConnectAccess>
<URI uri="(http|https)://localhost/*"/>
</ConnectAccess>
</IPermission>
</PermissionSet>

The assembly or AppDomain that failed was:
Hello.World, Version=1.0.3460.18220, Culture=neutral, PublicKeyToken=null
The method that caused the failure was:
Void InitializeComponent()
The Zone of the assembly that failed was:
Internet
The Url of the assembly that failed was:
http://localhost/HelloWorld/Hello.World.dll
   --- End of inner exception stack trace ---
   at ComponentFactory.Krypton.Toolkit.KryptonManager.get_CurrentGlobalPalette()
   at ComponentFactory.Krypton.Toolkit.VisualPanel..ctor()
   at ComponentFactory.Krypton.Toolkit.KryptonPanel..ctor()
   at Hello.World.BottomPanel.InitializeComponent()
   at Hello.World.BottomPanel..ctor()
   at Hello.World.Main.InitializeComponent()
   at Hello.World.Main..ctor()
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
   at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateComInstanceFrom(String assemblyName, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
   at System.AppDomain.CreateComInstanceFrom(String assemblyFile, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
   at System.AppDomain.CreateComInstanceFrom(String assemblyFile, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
   at Microsoft.IE.SecureFactory.CreateInstanceWithSecurity2(Int32 dwFlags, Int32 dwZone, String wszSite, String wszId, String wszConfig, String wszLicenses, String wszDeploymentManifest)
Microsoft.IE.SecureFactory: LOG exception
Microsoft.IE.SecureFactory: Creating log entry ?FusionBindError!name=Hello.World.dll Hello.World.Main
Microsoft.IE.SecureFactory: Logging to file C:\Documents and Settings\----\Local Settings\Temporary Internet Files\Content.IE5\F84FN98R\CAMF3O8J.HTM

El archivo de registro de errores de IEHost (CAMF308J.HTM) contenía:

*****   IEHOST Error Log (Monday, 22 June 2009 12:00)   *****



URL:        http://localhost/HelloWorld/Hello.World.dll
Zone:       3
Assembly Name:  Hello.World.dll
Type Name:  Hello.World.Main



----- Thrown Exception -----


System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'ComponentFactory.Krypton.Toolkit.KryptonManager' threw an exception. ---> System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.UIPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
   at System.Windows.Forms.ToolStripManager.set_Renderer(ToolStripRenderer value)
   at ComponentFactory.Krypton.Toolkit.KryptonManager.b()
   at ComponentFactory.Krypton.Toolkit.KryptonManager..cctor()
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.UIPermission
The first permission that failed was:


The demand was for:




The granted set of the failing assembly was:
















The assembly or AppDomain that failed was:
Hello.World, Version=1.0.3460.18220, Culture=neutral, PublicKeyToken=null
The method that caused the failure was:
Void InitializeComponent()
The Zone of the assembly that failed was:
Internet
The Url of the assembly that failed was:
http://localhost/HelloWorld/Hello.World.dll
   --- End of inner exception stack trace ---
   at ComponentFactory.Krypton.Toolkit.KryptonManager.get_CurrentGlobalPalette()
   at ComponentFactory.Krypton.Toolkit.VisualPanel..ctor()
   at ComponentFactory.Krypton.Toolkit.KryptonPanel..ctor()
   at Hello.World.BottomPanel.InitializeComponent()
   at Hello.World.BottomPanel..ctor()
   at Hello.World.Main.InitializeComponent()
   at Hello.World.Main..ctor()
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
   at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateComInstanceFrom(String assemblyName, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
   at System.AppDomain.CreateComInstanceFrom(String assemblyFile, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
   at System.AppDomain.CreateComInstanceFrom(String assemblyFile, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
   at Microsoft.IE.SecureFactory.CreateInstanceWithSecurity2(Int32 dwFlags, Int32 dwZone, String wszSite, String wszId, String wszConfig, String wszLicenses, String wszDeploymentManifest)
¿Fue útil?

Solución

Dentro de ese archivo hay un seguimiento de la pila; si lo publica, podría ayudarlo.

Además, debe tener plena confianza con el sitio configurado en su panel de control de configuración .NET x.x (o usar CASPOL para configurarlo).

Aquí se explica cómo depurar

  1. Utiliza el violinista (google, descarga y ejecuta).
  2. Actualizar la página
  3. ¿Se ha descargado el control? ¿Obtiene un HTTP 500? Si es así, desactive " Scripts and Executables " en el directorio de IIS --- IIS cree que esta es una DLL ISAPI y la ejecuta si todos son ejecutables
  4. ¿Obtiene un enlace de fusión? ¿Puedes arreglarlo?
  5. ¿Tiene una confianza total configurada con el sitio?

Otros consejos

Tenga en cuenta: IE8 deshabilita los controles de usuario en la zona de Internet, así que tenga esto en cuenta si planea implementar esto en un entorno de producción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top