Я не могу загрузить документ XML с использованием ASP (Classic), IIS6.Детали внутри - PullRequest
1 голос
/ 13 апреля 2010

Итак, я пишу веб-приложение для использования в моей организации. Приложение требует, чтобы оно знало, кто является текущим пользователем. Это делается путем вызова функции Request.ServerVariables («AUTH_USER»), которая прекрасно работает, если «Анонимный доступ» отключен (не отмечен) и «Встроенная проверка подлинности Windows» включена (проверена) в IIS для этого веб-каталога. *

К сожалению, делая это, я получаю сообщение об ошибке «Отказано в доступе», когда сталкиваюсь с методом загрузки XML DOM.

Пример кода:

dim urlToXmlFile
urlToXmlFile = "http://currentwebserver/currentsubweb/nameofxml.xml"

dim xmlDom
set xmlDom = Server.CreateObject("MSXML2.DOMDocument")

xmlDom.async = false
xmlDom.load( urlToXmlFile ) ' <-- this is where I get the error!

Я искал везде и не могу найти решение. Я должен иметь возможность загружать XML-файл в DOM независимо от метода аутентификации.

Любая помощь будет оценена. Пока что я могу предложить только два решения:

a) создайте новый веб-каталог, который JUST получает текущее имя пользователя и каким-то образом передает его обратно в мой XML-веб-каталог для чтения.

b) открыть защиту для всей системы для «Все», что работает, но наш отдел информационных технологий не позаботится об этом.

= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =

Вот мой оригинальный код, из-за которого отказано в доступе:

dim urlToXml
urlToXml = "http://someserver/somesomeweb/nameofxml.xml"

dim xmlDom
set xmlDom = Server.CreateObject("MSXML2.DOMDocument")
xmlDom.loadXML( urlToXml )

dim xsl 
set xsl = Server.CreateObject("MSXML2.DOMDocument")
xsl.async = false
xsl.load(server.MapPath("somexsl.xsl"))

Response.Write( xmlDom.transformNode(xsl) )
xmlDom.save( server.MapPath("accounting/somexml.xml") )

Теперь вот мой новый код благодаря thomask:

dim urlToXml
urlToXml = "http://someserver/somesomeweb/nameofxml.xml"

set http = CreateObject("MSXML2.ServerXMLHTTP.3.0")
http.Open "GET", urlToXml, false
http.Send()

dim xmlDom
set xmlDom = Server.CreateObject("MSXML2.DOMDocument")
xmlDom.loadXML( http.responseXML.xml )

dim xsl 
set xsl = Server.CreateObject("MSXML2.DOMDocument")
xsl.async = false
xsl.load(server.MapPath("somexsl.xsl"))

Response.Write( xmlDom.transformNode(xsl) )
xmlDom.save( server.MapPath("newxml.xml") )

Еще раз большое спасибо Томаска.

1 Ответ

1 голос
/ 15 апреля 2010

Возможно, вы захотите посмотреть MSXML2.ServerXMLHTTP (.3.0 - 6.0), чтобы указать учетные данные пользователя. Если Content-Type настроен правильно, ServerXMLHTTP должен предоставить вам DOMDocument в свойстве responseXml.

Dim http
Set http = CreateObject("MSXML2.ServerXMLHTTP.3.0")

http.Open("GET", "http://currentwebserver/currentsubweb/nameofxml.xml", false, "user", "pass")
http.Send()
...