0

私のアプリは、特定の時点で WebRequest を使用して、それ自体からページを取得します。

これは問題にはなりません。実際には、中程度の信頼を持つ「共有」ホスティング パッケージであるサーバー上で正常に動作します。ローカルでは、中程度の信頼に基づくカスタム セキュリティ ポリシーを使用します。これには、次のものが含まれます — デフォルトの中程度の信頼ポリシーからそのままコピーされます。

<許可
  クラス="WebPermission"
  バージョン="1">
    <コネクトアクセス>
        <URI uri="$OriginHost$"/>
    </接続アクセス>
</I許可>

問題のある行は、カスタム XmlRelativeUrlResolver にあります。

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

要求されている URL は、リクエスターと同じアプリケーション内の localhost にあります。これがスタック トレースの先頭です。

System.Security.CodeAccessSecurityEngine.Check (オブジェクトの要求、StackCrawlMark & stackMark、ブール値 isPermSet) で
   System.Security.CodeAccessPermission.Demand() で
   System.Net.HttpWebRequest..ctor (Uri uri、ServicePoint servicePoint) で
   System.Net.HttpRequestCreator.Create (Uri Uri) で
   System.Net.WebRequest.Create (Uri requestUri、ブール値の useUriBase) で
   System.Net.WebRequest.Create (Uri requestUri) で
   System.Xml.XmlDownloadManager.GetNonFileStream (Uri uri、ICredentials 資格情報) で
   System.Xml.XmlDownloadManager.GetStream (Uri uri、ICredentials 資格情報) で
   System.Xml.XmlUrlResolver.GetEntity (Uri absoluteUri、文字列の役割、Type ofObjectToReturn) で
   c:\flow\source\controls\DataTransform.cs:line 105 の flow.controls.XmlRelativeUrlResolver.GetEntity (Uri puriAbsolute、文字列 psRole、型 pReturnType) で
   System.Xml.Xsl.Xslt.XsltLoader.CreateReader (Uri uri、XmlResolver xmlResolver) で

誰もがここで問題を見ますか?

@Sijin: 提案ありがとうございます。リゾルバーに送られるURLはリクエストURLに基​​づいており、127.0.0.1でサイトにアクセスしても同じ結果になることをデバッガーで確認しました。

4

3 に答える 3

1

localhost の代わりに 127.0.0.1 を入れると動作しますか?

于 2008-10-01T15:38:22.337 に答える
0

これは解決策ではないかもしれませんが、あなたの投稿を見て、約 1 年前に遭遇したこの問題を思い出しました。

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

統合認証を使用し、IIS 5.1 または IIS 6 でホストされている Web サイトを参照すると、エラー 401.1 が表示される

ページをスクリーン スクレイピングするために WebRequest を作成していましたが、ループバック ホスト名を使用していなかったので実稼働環境では機能しましたが、開発マシンではアクセスが拒否されました (Windows Server 2003 SP2 を適用した後)。ここでの1つの違いは、これが統合認証下にあったため失敗したことです...リクエストが匿名の場合に機能しました(そのため、これがあなたの答えであるかどうかわかりません)。

于 2008-10-01T19:58:55.657 に答える
0

私の無知。$OriginHost$ トークンが信頼レベルの originUrl 属性を使用して置き換えられていることを知りませんでした — アプリの URL から来ただけだと思いました。私はもともとこの属性を空白のままにしていました。

<trust level="CustomMedium" originUrl="http://localhost/" />
于 2008-10-01T16:17:09.137 に答える