Pergunta

Criei um assembly e o referenciei em meu relatório do Reporting Services.Testei o relatório localmente (funciona) e, em seguida, carreguei-o em um servidor de relatórios (não funciona).

Aqui está o erro gerado pelo código personalizado que escrevi.

System.Security.SecurityException:Solicitação de permissão do tipo 'System.Security.Permissions.SecurityPermission, Mscorlib, versão = 2.0.0.0, Culture = Neutro, PublicKeyToken = B77A5C561934E089' falhou.em System.Security.CodeAccessSecurityEngine.ChecknReRSO (PermissionToken Permntoken, CodeAccesspermission Demand, StackCrawlmark e Stackmark, Int32 UnrestriRtiSTowSowride, sta32) em SystemerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMerMermEmemormem. mission.assert () em [Nome do método retirado] no relationexprhostimpl.customcodeproxy. [Nome do método retirado] A ação que falhou foi:Exigir o tipo de primeira permissão que falhou foi:System.Security.Permissions.SecurityPermission A zona da Assembléia que falhou foi:Meu computador

Este projeto é algo que herdei e não estou intimamente familiarizado com ele.Embora eu tenha o código (agora), posso pelo menos trabalhar com ele :)

Acredito que o código que está falhando é este:

    Dim fio As System.Security.Permissions.FileIOPermission = New System.Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
    fio.Assert()

No entanto, esse tipo de coisa também está em toda parte:

Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hhash As Integer, ByVal pbData As String, ByVal dwDataLen As Integer, ByVal dwFlags As Integer) As Integer

Posso ver que qualquer uma dessas coisas é algo que o Reporting Services não acomodaria imediatamente.

Foi útil?

Solução 2

Foi assim que consegui resolver o problema:

  • assine fortemente o assembly personalizado em questão
  • modifique o arquivo rssrvpolicy.config para adicionar permissões para o assembly

                        <CodeGroup
                            class="UnionCodeGroup"
                            version="1"
                            PermissionSetName="FullTrust"
                            Name="Test"
                            Description="This code group grants the Test code full trust. ">
                            <IMembershipCondition
                                    class="StrongNameMembershipCondition"
                                    version="1"
                                    PublicKeyBlob="0024000004800000940100000602000000240000575341310004000001000100ab4b135615ca6dfd586aa0c5807b3e07fa7a02b3f376c131e0442607de792a346e64710e82c833b42c672680732f16193ba90b2819a77fa22ac6d41559724b9c253358614c270c651fad5afe9a0f8cbd1e5e79f35e0f04cb3e3b020162ac86f633cf0d205263280e3400d1a5b5781bf6bd12f97917dcdde3c8d03ee61ccba2c0"
                                />
                        </CodeGroup>
    

Nota:aqui está uma ótima maneira de obter o blob de chave pública do seu assemblyTruque VS para obter o token de chave pública e o blob de um assembly assinado.

Outras dicas

<system.web>

<trust level="Full"/>

</system.web>

tente isso em web.config

Execute seu serviço em modo administrador

 <CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="FullTrust">

Para mim, a solução foi mudar a linha acima no rssrvpolicy.config de "None" para "FullTrust".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top