1.
[PermissionSet(SecurityAction.Demand, Name ="FullTrust")]
[ComVisibleAttribute(true)]publicpartialclassfrmWebData : Form
{publicfrmWebData()
{
InitializeComponent();
}PRotectedoverridevoidOnLoad(EventArgs e)
{
wbService.ObjectForScripting =this;base.OnLoad(e);
}
}
2.后台调用javascript脚本
<script type="text/Javascript"language="javascript">functionErrorMessage(message) {
document.getElementById("error").innerText = message;
}
</script>
后台代码
staticstringErrorMsg =string.Empty;privatevoidwbService_DocumentCompleted(objectsender, WebBrowserDocumentCompletedEventArgs e)
{if(!string.IsNullOrEmpty(ErrorMsg))
wbService.Document.InvokeScript("ErrorMessage",newobject[1] {string.Format("操作失败,原因:{0}!", ErrorMsg) });
}
3.JavaScript脚本调用后台方法
脚本代码
<div id="content">
<h2 id="error">
操作正在响应中.....</h2>
<divclass="utilities">
<aclass="button right"
onclick="window.external.DoSvrWebDbBack()">
刷新</a>
<!--<aclass="button right"onclick="window.external.NavigateToLogin()">重新登录</a>-->
<divclass="clear">
</div>
</div>
</div>
后台代码
publicvoidDoSvrWebDbBack()
{try{
}catch(TimeoutException)
{
ErrorMsg ="超时,请稍候再尝试!";
}catch(Exception ex)
{
ErrorMsg = ex.Message.ToString();
}
}
4.设置cookie
Cookie _cookie = BaseWinForm.LoginMessage.sessionID2;
InternetSetCookie(BaseWinForm.LoginMessage.SvrWebDbBack,"asp.net_SessionId", _cookie.Value);
wbService.Navigate(BaseWinForm.LoginMessage.SvrWebDbBack,null,null,string.Format("Referer:{0}", BaseWinForm.LoginMessage.SvrWebDbLoingUrl));
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError =true)]publicstaticexternboolInternetSetCookie(stringurlName,stringcookieName,stringcookieData);
4.请求链接获取返回处理
publicclassHttpWebRequestToolV2
{publicdelegateHttpWebRequest RequestRule(stringurl);/// <summary>/// 发起HttpWebResponse请求/// </summary>/// <param name="url">请求连接</param>/// <param name="credentials">请求参数</param>/// <param name="httpWebRequestRule">请求设置『委托』,当委托等于NULL的时候,默认请求;否则使用所设置的HttpWebRequest</param>/// <returns>HttpWebResponse</returns>publicstaticHttpWebResponse CreateHttpWebRequest(stringurl,byte[] credentials, RequestRule httpWebRequestRule)
{if(string.IsNullOrEmpty(url))thrownewArgumentNullException("url");
HttpWebRequest _request =null;if(httpWebRequestRule !=null)
{
_request = httpWebRequestRule(url);
}else{
_request = WebRequest.Create(url)asHttpWebRequest;
_request.Method ="POST";
_request.ContentType ="application/x-www-form-urlencoded";
_request.CookieContainer =newCookieContainer();
}if(credentials !=null)
{
_request.ContentLength = credentials.Length;using(var requestStream = _request.GetRequestStream())
{
requestStream.Write(credentials, 0, credentials.Length);
}
}return_request.GetResponse()asHttpWebResponse;
}/// <summary>/// 创建验证凭证/// eg:/// IDictionary<string, string> _requestCredentials = new Dictionary<string, string>();///_requestCredentials.Add("UserName", _userName);///_requestCredentials.Add("PassWord", _userPwd);///_requestCredentials.Add("MacAddress", _macAddress);///byte[] _credentials = HttpWebRequestToolV2.CreateCredentials(_requestCredentials, Encoding.UTF8);/// </summary>/// <returns></returns>publicstaticbyte[] CreateCredentials(IDictionary<string,string> credentials, Encoding encoding)
{if(credentials ==null)thrownewArgumentNullException("credentials");if(credentials.Count == 0)thrownewArgumentException("credentials");if(encoding ==null)thrownewArgumentNullException("encoding");
StringBuilder _credentials =newStringBuilder();foreach(KeyValuePair<string,string> credentialincredentials)
{
_credentials.AppendFormat("{0}={1}&", credential.Key, credential.Value);
}string_credentialsString = _credentials.ToString().Trim();int_endIndex = _credentialsString.LastIndexOf('&');if(_endIndex != -1)
_credentialsString = _credentialsString.Substring(0, _endIndex);returnencoding.GetBytes(_credentialsString);
}
使用示例
publicstaticHttpWebRequest RequestSetting(stringurl)
{
HttpWebRequest _request =null;
_request = WebRequest.Create(url)asHttpWebRequest;
_request.Method ="POST";
_request.ContentType ="application/x-www-form-urlencoded";
_request.Timeout = 1000 * 10;//超时五秒_request.CookieContainer =newCookieContainer();return_request;
}/// <summary>/// 登录web网页验证/// </summary>/// <param name="url">超链接</param>/// <param name="_userName">用户名</param>/// <param name="_userPwd">密码</param>/// <param name="_macAddress">MAC地址</param>/// <param name="sessionID">会话</param>/// <returns>网页登录验证是否成功『失败,将抛出网页验证验证失败信息』</returns>publicboolProcessRemoteLogin(stringurl,string_userName,string_userPwd,string_macAddress,outCookie sessionID)
{bool_checkResult =false;string_errorMessage =string.Empty;//--------------------创建登录凭证--------------------IDictionary<string,string> _requestCredentials =newDictionary<string,string>();
_requestCredentials.Add("UserName", _userName);
_requestCredentials.Add("PassWord", _userPwd);
_requestCredentials.Add("MacAddress", _macAddress);byte[] _credentials = HttpWebRequestToolV2.
CreateCredentials
(_requestCredentials, Encoding.UTF8);//-----------------------------------------------------CookieCollection _cookie =null;/**LoginType 1:成功 0:失败*Err 失败原因*/using(HttpWebResponse _httpRespone = HttpWebRequestToolV2.
CreateHttpWebRequest
(url, _credentials, RequestSetting))
{
_cookie =newCookieCollection();if(_httpRespone.Cookies.Count > 0)
_cookie.Add(_httpRespone.Cookies);
}//-------------------------------------------------------Cookie _loginType = _cookie["LoginType"];
sessionID = _cookie["ASP.NET_SessionId"];
Cookie _err = _cookie["Err"];if(_loginType !=null&& _err !=null&& sessionID !=null)
{
_checkResult = _loginType.Value.Equals("1");if(!_checkResult)
_errorMessage = HttpUtility.UrlDecode(_err.Value);
}else{
_errorMessage ="Web服务异常,请稍候在试!";
}if(!string.IsNullOrEmpty(_errorMessage))thrownewException(_errorMessage);return_checkResult;
}
5.从WebBrowser中获取CookieContainer
/// <summary>/// 从WebBrowser中获取CookieContainer/// </summary>/// <param name="webBrowser">WebBrowser对象</param>/// <returns>CookieContainer</returns>publicstaticCookieContainer GetCookieContainer(thisWebBrowser webBrowser)
{if(webBrowser ==null)thrownewArgumentNullException("webBrowser");
CookieContainer _cookieContainer =newCookieContainer();string_cookieString = webBrowser.Document.Cookie;if(string.IsNullOrEmpty(_cookieString))return_cookieContainer;string[] _cookies = _cookieString.Split(';');if(_cookies ==null)return_cookieContainer;foreach(stringcookieStringin_cookies)
{string[] _cookieNameValue = cookieString.Split('=');if(_cookieNameValue.Length != 2)continue;
Cookie _cookie =newCookie(_cookieNameValue[0].Trim().ToString(), _cookieNameValue[1].Trim().ToString());
_cookieContainer.Add(_cookie);
}return_cookieContainer;
}