我目前正致力于win7& 8混合应用程序。
我需要在混合应用程序中维护会话。因为该用户必须在app中登录。然后为了维护会话,我们将请求登录验证服务。一旦我们在Web服务响应中获取cookie,我们将注入这些cookie用于Windows手机网页浏览器控件以显示相关页面。
从登录服务记录Cookie 通过传递post参数为登录身份验证创建了httpwebrequest。从callback-httpwebresponse捕获set-cookies,这是一个JSON响应,并将其保存在本地Variable / Cookie Container / Cookie集合中。
将Cookie设置为其他请求:
- > 在所有其他请求的Web浏览器控件的标头字段中传递Cookie。它很有效。
- > 创建了一个HttpWebRequest并在标题字段中设置了Cookie。
- > 将html Web响应保存到异步回调方法的字符串变量中,并尝试将其加载到Web浏览器控件中。
Web浏览器控件只有一种方法可以加载html网页(即" webbrowser.NavigateToString(string html)")。
从回调响应方法触发另一个事件处理程序。我们可以在字符串变量中看到html代码。但它是 在浏览器中显示黑页。
尝试将html文件保存在独立存储中,并使浏览器导航到文件位置。它显示一个空白 页。
试图附加"" + httpWebResponse +"" - 它显示的页面没有任何CSS或
图片。页面中的其他导航也没有发生。
影响:会话不是通过应用程序维护的。
使用的工具: Microsoft Visual studio ultimate 2010 Version 10, Microsoft .Net framework 4.0版, Windows Phone 7.1 SDK
任何人都可以帮助我。谢谢你提前!!
请参考以下代码: 从登录服务记录Cookie:
private void PostLoginRequest() {
string AuthServiceUri = "Service URL";
HttpWebRequest AuthReq = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
AuthReq.CookieContainer = new CookieContainer();
AuthReq.ContentType = "application/x-www-form-urlencoded";
AuthReq.Method = "POST";
AuthReq.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), AuthReq);
}
void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest Request = (HttpWebRequest)callbackResult.AsyncState;
Stream postStream = Request.EndGetRequestStream(callbackResult);
string postData = "Postdata parameters";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), Request);
}
void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
try
{
HttpWebRequest callBackRequest = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
CookieCollection cookiecollec = new CookieCollection();
cookiecollec = response.Cookies;
App.cookieCollection = cookiecollec; //global varaiable
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
另一个带有已记录Cookie的httpwebrequest:
private void ResponsivePostURL(string PageName,string PostURL,string PostDatas) {
Uri ServiceUri = new Uri(PostURL); //Service URL
HttpWebRequest requestURL = HttpWebRequest.CreateServiceUri as HttpWebRequest;
requestURL.ContentType = "application/x-www-form-urlencoded";
requestURL.Method = "POST";
requestURL.CookieContainer = new CookieContainer();
requestURL.CookieContainer.Add(ServiceUri, App.cookieCollection);
requestURL.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), requestURL);
}
void GetResponsetStreamCallback(IAsyncResult callbackResult) {
try
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
// MessageBox.Show(response.Cookies.ToString());
string responseString = "<html><head></head><body>";
Stream streamResponse = response.GetResponseStream();
StreamReader reader = new StreamReader(streamResponse);
responseString = responseString + reader.ReadToEnd() + "</body></html>";
streamResponse.Close();
reader.Close();
response.Close();
this.Dispatcher.BeginInvoke(() =>
{
webBrowser.IsScriptEnabled = true;
webBrowser.NavigateToString(responseString);
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}