質問

私のアプリは、特定の時点で 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 は、リクエスターと同じアプリケーション内のローカルホスト上にあります。これがスタック トレースの先頭です。

 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)

ここで問題に気づいた人はいますか?

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

役に立ちましたか?

解決 2

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

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

他のヒント

localhostの代わりに127.0.0.1を入力しても機能しますか?

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

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

エラー 401.1 が表示されるのは、次の場合です。 Integrated を使用する Web サイトを参照する 認証であり、IIS でホストされます 5.1 または IIS 6

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top