【发布时间】:2012-11-30 16:13:34
【问题描述】:
我们在 Azure 上有一个 RDL 和 XML 文件。我有一个完整的 URI,指向带有 loginId 和密码(Azure)的路径,可以直接下载 xml 文件。
在浏览器中,此链接 (fullURI) 将 1. 打开 Azure 登录页面。 2. 在输入凭据时,它会打开一个对话框,询问您 - 您要打开/保存/取消 xml 文件吗? 3. 如果我们选择打开,那么它将在浏览器中打开 XML 文件。
在带有 C# 代码的 WP7 应用程序中,我们试图从上面访问 xml。代码sn-p如下。
protected class GetContext
{
public HttpWebRequest Request;
}
请求
HttpWebRequest xmlReportRequest;
… ….
// baseuri is a HTTPS link to azure reporting server.
URI fullUri = new Uri(baseuri + "&rs:Command=Render&rs:Format=XML");
xmlReportRequest = (HttpWebRequest)HttpWebRequest.Create(fullUri.Uri);
xmlReportRequest.Credentials = new NetworkCredential(UserName, Password);
// start the asynchronous request
xmlReportRequest.BeginGetResponse(new AsyncCallback(HandleResponse), new GetContext { Request = request });
);
回应
private void HandleResponse(IAsyncResult asyncResult)
{
var context = (GetFContext)result.AsyncState;
WebResponse response = context.Request.EndGetResponse(asyncResult);
//get the stream containing the response from the async call
Stream streamResult;
streamResult = response.GetResponseStream();
// load the XML
_xmlDocument = XElement.Load(streamResult); // EXCEPTION AT THIS LINE NOTSUPPORTEDEXCEPTION
…. … …
}
这里,GetResponseStream 的输出不是 XML 文件。当流存储到字符串中时,我们看到它是作为 HTML 的 Azure 登录页面。
RESPONSE FROM GETRESPONSESTREAM 我觉得这只是一个 HTML azure 登录页面(带有我们发送的信息)。下面是回复,这里我用 URL_TO_THE_XML_FILE_IN_REPORTING_SERVER 替换了一些机密信息(它基本上是目标 uri),SOME_ENCRYPTED_VALUE。
\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\r\n\r\n\r\n<html lang=\"en-US\">\r\n <head id=\"Head1\"><meta http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\" /><link rel=\"Stylesheet\" type=\"text/css\" href=\"Public/Logon.css\" /><title>\r\n\tWindows Azure SQL Reporting\r\n</title></head>\r\n <body >\r\n <form name=\"Logon\" method=\"post\" action=\"logon.aspx?ReturnUrl=URL_TO_THE_XML_FILE_IN_REPORTING_SERVER\" id=\"Logon\">\r\n<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"/SOME_ENCRYPTED_VALUE\" />\r\n\r\n<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"/SOME_ENCRYPTED_VALUE\" />\r\n\r\n <h1 id=\"Title\"><span id=\"LblTitleContent\">Windows Azure</span></h1>\r\n <hr />\r\n <div class=\"ClsIntro\">\r\n <span id=\"LblIntro\"></span>\r\n </div>\r\n <div class=\"ClsInput\">\r\n <div>\r\n <label for=\"TxtUser\" id=\"LblUser\">User name</label>\r\n </div>\r\n <div>\r\n <input name=\"TxtUser\" type=\"text\" id=\"TxtUser\" tabindex=\"1\" />\r\n </div>\r\n </div>\r\n <div class=\"ClsInput\">\r\n <div>\r\n <label for=\"TxtPwd\" id=\"LblPwd\">Password</label>\r\n </div>\r\n <div>\r\n <input name=\"TxtPwd\" type=\"password\" id=\"TxtPwd\" tabindex=\"2\" />\r\n </div>\r\n </div>\r\n <div class=\"ClsSignIn\">\r\n <input type=\"submit\" name=\"BtnLogon\" value=\"Sign in\" id=\"BtnLogon\" tabindex=\"4\" /><input type=\"image\" name=\"BtnLogonArrow\" id=\"BtnLogonArrow\" tabindex=\"5\" src=\"Public/WhiteRightArrow.png\" alt=\"Sign in\" align=\"baseline\" border=\"0\" />\r\n </div>\r\n <div class=\"ClsErrMsg\">\r\n <span id=\"lblMessage\"></span>\r\n </div>\r\n <hr />\r\n </form>\r\n </body>\r\n</html>
问题
即使传递了网络凭据,为什么我们会收到带有登录页面的 HTML 响应?
什么可能导致此行中的异常? - _xmlDocument = XElement.Load(streamResult)
我们从 C# 代码访问 Azure 托管的 XML 的方式是否遗漏了什么?
我们是否应该根据您从我们问题描述的前四行中所理解的内容来查看服务器端以更正直接 XML 文件的 URL?
提前致谢,
Trilok Rangan。
【问题讨论】:
-
您是如何创建 XML 文件的? NotSupportedException 通常表明您的 XML 文件有问题。
-
我们得到一个 HTML 文件作为响应,而不是一个 XML 文件,因此我相信 NotSupportedException。
-
如何返回 XML 文件?请显示一些服务器端代码
-
@SandrinoDiMattia - 没有我们自己的代码在服务器端运行,因为它只是在报告服务上运行。我正在连接到报告服务。
-
您将什么指定为响应的 MIME 类型?
标签: c# xml windows-phone-7 azure reporting-services