主要是接收android傳遞的數據容易受到誤導,多留意參數變化。
一、新增一個類MySoapHeader
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;
namespace WebDemo
{
public class MySoapHeader : SoapHeader
{
public MySoapHeader() { }
public string UserName { get; set; }
public string PassWord { get; set; }
public bool ValideUser(string Account, string PassWord)
{
if ((Account == "SoapHeader") && (PassWord == "123456"))
return true;
else
return false;
}
}
}
2、在WebService類中使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace WebDemo
{
/// <summary>
/// WebService 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消註釋以下行。
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
public WebService()
{
HttpBrowserCapabilities myBrowserCaps = Context.Request.Browser;
//判斷是否爲移動設備
if (((HttpCapabilitiesBase)myBrowserCaps).IsMobileDevice)
{
header = new MySoapHeader();
header.UserName = Context.Request["HTTP_ACCOUNT"];//帳號
header.PassWord = Context.Request["HTTP_PASSWORD"];//密碼
}
}
public MySoapHeader header; ////定義用戶身份驗證類變量header
[WebMethod(Description = "用戶WebService基於SoapHeader實現安全認證測試")]
[SoapHeader("header")]//用戶身份驗證的soap頭
public string HelloWorld(string contents)
{
//驗證是否有權訪問
if (header.ValideUser(header.UserName, header.PassWord))
return "訪問成功";
else
return "您沒有權限訪問!";
}
}
}
3、android調用
獲取android傳遞的帳號和密碼,設定獲取帳號的Key爲”HTTP_ACCOUNT”,但是android傳遞參數的名稱是沒有”HTTP_”的,即account即可,密碼也是如此。
我們查看下android調用部分代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RequestParams params = getParams();
params.addBodyParameter("contents", "Hello World!");
new HttpUtils(1500).send(HttpMethod.POST,
"http://192.168.1.106:105/WebService.asmx/HelloWorld", params,
new RequestCallBack<string>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO 自動生成的方法存根
LogUtils.d("login----------------------" + arg0);
}
@Override
public void onSuccess(ResponseInfo<string> arg0) {
// TODO 自動生成的方法存根
LogUtils.d("login----------------------" + arg0.result);
}
});
}
public RequestParams getParams() {
RequestParams params = new RequestParams();
params.addHeader("account", "SoapHeader");
params.addHeader("password", "456789");
return params;
}
4、PC調用
記得添加服務引用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebDemo.ServiceReference;
namespace WebDemo
{
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ServiceReference.WebServiceSoapClient sc = new WebServiceSoapClient();
ServiceReference.MySoapHeader Header = new ServiceReference.MySoapHeader();
Header.UserName = "SoapHeader";
Header.PassWord = "456789";
string s = sc.HelloWorld(Header,"Hello World!");
Response.Write(s);
}
}
}