从localhost到localhost的WebRequest:为什么被拒绝?

时间:2008-10-01 15:36:09

标签: asp.net security configuration webrequest

我的应用在某些点使用WebRequest来获取自己的页面。

这应该不是问题。它实际上在服务器上工作正常,这是一个具有中等信任的“共享”主机包。在本地,我使用基于中信任的自定义安全策略,其中包括以下内容 - 直接从默认的中信任策略中复制:

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

违规行在自定义XmlRelativeUrlResolver中:

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

请求的url位于localhost上,与请求者位于同一应用程序中。这是堆栈跟踪的顶部。

 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)

有人在这里看到问题吗?

@Sijin:谢谢你的建议。发送到解析程序的URL基于请求URL,我在调试器中确认访问127.0.0.1的站点会产生相同的结果。

3 个答案:

答案 0 :(得分:1)

如果你输入127.0.0.1而不是localhost吗?

答案 1 :(得分:0)

我的无知。我不知道$ OriginHost $令牌是使用信任级别的originUrl属性替换的 - 我认为它只是来自应用程序的url。我原来把这个属性留空了。

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

答案 2 :(得分:0)

这可能不是解决方案,但是当我看到你的帖子时,我想起了我在大约一年前遇到的这个问题:

  

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

     

您收到错误401.1   浏览使用Integrated的网站   身份验证并托管在IIS上   5.1或IIS 6

我们正在创建一个WebRequest来筛选页面并且它在我们的生产环境中工作,因为我们没有使用环回主机名,但在开发机器上我们最终拒绝访问(在应用Windows Server 2003 SP2之后)。这里的一个区别是,这是在集成身份验证下导致它失败...当请求是匿名时它起作用(这就是为什么我不确定这是你的答案)。