Кажется, я не могу загрузить XML-документ с помощью ASP (Classic), IIS6. Подробности внутри

Поэтому я пишу веб-приложение для использования в моей организации. Приложение требует, чтобы оно знало, кто является текущим пользователем. Это делается путем вызова функции 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 независимо от метода аутентификации.

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

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

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

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

Вот мой исходный код, который вызывает ошибку отказа в доступе:

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") )

Еще раз большое спасибо thomask.


person carny666    schedule 13.04.2010    source источник
comment
Вы уже пытались получить доступ к документу Xml непосредственно в http://currentwebserver/currentsubweb/nameofxml.xml с нужными параметрами безопасности (встроенная проверка подлинности Windows)?   -  person Filburt    schedule 15.04.2010
comment
Вы можете использовать http.responseXML напрямую (если сервер отправляет правильный Content-Type, это свойство будет объектом XMLDocument) или использовать http.responseText, но это, вероятно, не будет иметь большого значения.   -  person Thomas Kjørnes    schedule 15.04.2010


Ответы (1)


Вы можете посмотреть 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()
person Thomas Kjørnes    schedule 14.04.2010