这里直接讲解WebService的实现过程及其中应该注意的点,有关其应用的环境等请度娘或者google。
首先新建一个WebService服务:如图:
我的WebService的结构如下图:
好了,这里主要讲解身份验证类以及asmx服务使用身份验证应该注意的问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;
namespace WebEmpty
{
public class Authentication_WS : SoapHeader
{
private string userID = string.Empty;
private string userPW = string.Empty;
public string UserId
{
get { return userID; }
set { userID = value; }
}
public string UserPW
{
get { return userPW; }
set { userPW = value; }
}
public Authentication_WS()
{ }
public Authentication_WS(string name, string password)
{
userID = name;
userPW = password;
}
private bool IsValid(string nUserId, string nPassWord, out string nMsg)
{
nMsg = "";
try
{
if (nUserId == "admin" && nPassWord == "admin")
{
return true;
}
else
{
nMsg = "Sorry, you have no right to call the Web service ";
return false;
}
}
catch
{
nMsg = "Sorry, you have no right to call the Web service";
return false;
}
}
public bool IsValid(out string nMsg)
{
return IsValid(userID,userPW,out nMsg);
}
}
}
好了 , 加入身份验证也是为了让服务更加的安全。
在服务中使用身份验证信息:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
namespace WebEmpty
{
/// <summary>
/// WebAiny 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
//[System.Web.Script.Services.ScriptService]
//[XmlInclude(typeof(DM_Introduce))]
public class WebAiny : System.Web.Services.WebService
{
public Authentication_WS authentication = new Authentication_WS();//引入身份验证类
//[OperationContract]
//[WebGet(UriTemplate = "Add/{x}/{y}", ResponseFormat = WebMessageFormat.Xml)]
[WebMethod(Description="测试WebService")]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
[SoapHeader("authentication")]
public string Add(int a, int b)
{
string msg = "";
if (!authentication.IsValid(out msg))
{
return msg;
}
else
{
return (a + b).ToString();
}
}
[WebMethod(Description = "测试类型")]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public void Type() {
Context.Response.Write("OK - no SOAP xml Data");
}
}
}
(重点)注意点:
①Add方法使用了身份验证功能 , 所以此方法上需要加一个特性: [SoapHeader("authentication")] ( authentication -》 public Authentication_WS authentication = new Authentication_WS();//引入身份验证类)
这个IIS web服务器配置,读者可以搜百度自己解决。运行程序如下:
我建了一个控制台程序来测试这个WebService。
是使用WebService的功能必须要引用WebService的服务,引用方法步骤如下所示:
①,引入WebService
如上图,我的WebService的引用名称为WS
②看测试代码 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Client2WebService
{
class Program
{
static void Main(string[] args)
{
WS.WebAiny webAiny = new WS.WebAiny();
WS.Authentication_WS authentication = new WS.Authentication_WS();
authentication.UserId = "admin";
authentication.UserPW = "admin";
webAiny.Authentication_WSValue = authentication;
string result = webAiny.Add(1, 3);
Console.WriteLine("1+3 = {0}", result);
Console.ReadLine();
}
}
}
结果:
需要指出的是 : Authentication_WSValue属性是系统自动生成的(就是自己的身份验证类后面紧加一个Value),用于设置验证类。
我们给一个错误的账号(密码错误):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Client2WebService
{
class Program
{
static void Main(string[] args)
{
WS.WebAiny webAiny = new WS.WebAiny();
WS.Authentication_WS authentication = new WS.Authentication_WS();
authentication.UserId = "admin";
authentication.UserPW = "admin1";
webAiny.Authentication_WSValue = authentication;
string result = webAiny.Add(1, 3);
Console.WriteLine("1+3 = {0}", result);
Console.ReadLine();
}
}
}
结果为:
这样就能比较好的保护自己的服务了。。。。。。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。