Pergunta

Meu aplicativo usa um WebRequest em determinados pontos para obter páginas de si mesmo.

Isto não deve ser um problema. Ele realmente funciona muito bem no servidor, que é um "compartilhada" pacote de hospedagem com Medium confiança. Localmente, eu uso uma política de segurança personalizado baseado no Medium confiança, que inclui o seguinte: - copiado diretamente da política de confiança média padrão:

<IPermission
  class="WebPermission"
  version="1">
    <ConnectAccess>
        <URI uri="$OriginHost$"/>
    </ConnectAccess>
</IPermission>

A linha de ofender está em uma XmlRelativeUrlResolver personalizado:

public override object GetEntity( System.Uri puriAbsolute, string psRole, System.Type pReturnType )
{
    return _baseResolver.GetEntity( puriAbsolute, psRole, pReturnType );
}

O url sendo solicitado está em localhost, na mesma aplicação como o solicitante. Aqui está a parte superior do rastreamento de pilha.

 at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint)
   at System.Net.HttpRequestCreator.Create(Uri Uri)
   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   at flow.controls.XmlRelativeUrlResolver.GetEntity(Uri puriAbsolute, String psRole, Type pReturnType) in c:\flow\source\controls\DataTransform.cs:line 105
   at System.Xml.Xsl.Xslt.XsltLoader.CreateReader(Uri uri, XmlResolver xmlResolver)

Qualquer um vê o problema aqui?

@Sijin: Obrigado pela sugestão. O url que é enviado para o resolvedor é baseada na URL da solicitação, e eu confirmou no depurador que acessar o site em 127.0.0.1 produz o mesmo resultado.

Foi útil?

Solução 2

A minha ignorância. Eu não sabia que os US $ OriginHost $ token de foi substituído usando o atributo originUrl do nível de confiança - Eu pensei que só veio a partir da url do app. Eu tinha originalmente deixou este atributo em branco.

<trust level="CustomMedium" originUrl="http://localhost/" />

Outras dicas

Será que funciona se você colocar 127.0.0.1 em vez de localhost?

Isto pode não ser a solução, mas quando vi seu post me lembrei esta questão que eu corri em cerca de um ano atrás:

http://support.microsoft.com/default.aspx/kb/896861

Você recebe o erro 401.1 quando navegar em um site que usa Integrated Autenticação e está hospedado no IIS 5.1 ou IIS 6

Estávamos criando um WebRequest para a tela raspar uma página e funcionou em nosso ambiente de produção porque não estávamos usando um nome de host de auto-retorno, mas em máquinas de desenvolvimento acabamos com acesso negado (após a aplicação do Windows Server 2003 SP2). A diferença aqui é que este estava sob a autenticação integrada do que causou a falhar ... funcionou quando o pedido era anônimo (é por isso que eu não tenho certeza esta é a resposta para você).

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