[英]Getting a XML file as response in C# from Azure
我們在Azure上有一個RDL和XML文件。 我有一個fullURI到loginId和密碼(Azure)的路徑,可以直接下載一個xml文件。
在瀏覽器中,此鏈接(fullURI)將 1.打開Azure登錄頁面。 2.在輸入憑據時,它會打開一個對話框,詢問您 - 是否要打開/保存/取消xml文件? 3.如果我們選擇Open,它將在瀏覽器中打開XML文件。
在使用C#代碼的WP7應用程序中,我們嘗試從上面訪問xml。 代碼段如下所示。
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文件。 當流存儲到字符串中時,我們看到它是Azure登錄頁面的HTML。
從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。
在遇到異常時遇到服務器上的通用錯誤處理頁面可能會導致返回html。
因此,請確保在所有情況下都返回xml,即使出現異常也是如此。
該異常可能是由安全問題或服務器上的任何其他錯誤引起的。
確保服務器設置的內容類型正確。
如果文件存儲在blob-storage中: 在blob存儲資源管理器中標記文件的mime類型
如果文件是靜態內容: 使用mimeMap元素在web.config中添加mime類型 :
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
<mimeMap fileExtension=".m4v" mimeType="video/m4v" />
</staticContent>
</system.webServer>
</configuration>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.