3

Azure に RDL ファイルと XML ファイルがあります。xml ファイルを直接ダウンロードできる (Azure の) loginId とパスワードを含むパスへの fullURI があります。

ブラウザーでは、このリンク (fullURI) は次のようになり ます。 1. Azure ログイン ページを開きます。2.資格情報を入力すると、ダイアログが開き、次のように尋ねられます - Do you want to Open / Save / Cancel the xml file? 3. [開く] を選択すると、ブラウザーで 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 ファイルではありません。ストリームが文字列に格納されると、それが HTML としての Azure ログイン ページであることがわかります。

GETRESPONSSTREAM からの応答は、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>

質問

  1. ネットワーク資格情報が渡されたにもかかわらず、ログイン ページで HTML 応答が返されるのはなぜですか?

  2. この行の例外の原因は何ですか? - _xmlDocument = XElement.Load(streamResult)

  3. Azure でホストされている XML に C# コードからアクセスする方法に欠けているものはありますか?

  4. 問題の説明の最初の 4 行から理解できることに基づいて、URL を直接の XML ファイルに修正するためにサーバー側に目を向けるべきでしょうか?

前もって感謝します、

トリロック・ランガン。

4

1 に答える 1

1

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> 
于 2012-11-30T05:52:23.883 に答える