加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

搭建WebService服务

发布时间:2020-12-17 01:21:30 所属栏目:安全 来源:网络整理
导读:案例应用情景:WebService服务可为多平台提供企业集成、用户信息验证(解决多系统登录问题)、跨平台的信息查询服务(国内手机归属地查询、天气预报web服务、股票行情数据服务、国内飞机航班时刻表web服务、中国电视节目预告web服务、腾讯QQ在线状态web服务

案例应用情景:WebService服务可为多平台提供企业集成、用户信息验证(解决多系统登录问题)、跨平台的信息查询服务(国内手机归属地查询、天气预报web服务、股票行情数据服务、国内飞机航班时刻表web服务、中国电视节目预告web服务、腾讯QQ在线状态web服务、Email电子邮件地址验证web服务、ip地址来源搜索web服务)图形与多媒体(验证码图片web服务 支持中文、字母、数字)、 计算与单位换算(中文简体字《-》繁体字转换web服务)

?

?

本实例主要介绍:本地调用webservice和客户调用webservice两种情况。后面一种一般用在甲方和乙方做数据对接查询服务用,即所要的数据在对方的网站上。一方会把建好的webservice调用地址和方法名告诉对方,另一方根据该地址和方法编写客户端调用程序即下文的步骤四。

步骤:

一、先在站点建立WebService服务。(服务方先在自己的网站上建立webservice服务,编写好方法以便供客户方调用)

?

代码:

using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

public class myheader : SoapHeader
{
??? public string username;
??? public string password;
}?


/// <summary>
///WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://localhost/xcweb2011/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

?public myheader my;?

?public WebService () {

??? //??? //如果使用设计的组件,请取消注释以下行
??? //??? //InitializeComponent();
}

??? [WebMethod]
??? public string HelloWorld() {
???? return "Hello World";
??? }

? [WebMethod]??
? [SoapHeader( "my",Direction? =SoapHeaderDirection .In )]??

? public void testsoapheadin()?
? {
????? System.Diagnostics.Debug.Write(my.username);
????? System.Diagnostics.Debug.Write(my.password);

? }?

}

?

?

二、如未发布站点则建立iis站点

三、本地调用代码(服务方本地调用,即自己站点上代码)

?

四、客户端调用(客户方根据服务方给的webservice调用的https地址和方法名称而编写对应的调用程序。)

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Net;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.Services.Protocols;
using System.Xml.Serialization;

public partial class Default4 : System.Web.UI.Page
{
??? protected void Page_Load(object sender,EventArgs e)
??? {
??????? // 1. 使用 WebClient 下载 WSDL 信息。
??????? WebClient web = new WebClient();
??????? Stream stream = web.OpenRead("http://localhost/xcweb2011/WebService.asmx?WSDL");

??????? // 2. 创建和格式化 WSDL 文档。
??????? ServiceDescription description = ServiceDescription.Read(stream);

??????? // 3. 创建客户端代理代理类。
??????? ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

??????? importer.ProtocolName = "Soap"; // 指定访问协议。
??????? importer.Style = ServiceDescriptionImportStyle.Client; // 生成客户端代理。
??????? importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

??????? importer.AddServiceDescription(description,null,null); // 添加 WSDL 文档。

??????? // 4. 使用 CodeDom 编译客户端代理类。
??????? CodeNamespace nmspace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间。
??????? CodeCompileUnit unit = new CodeCompileUnit();
??????? unit.Namespaces.Add(nmspace);

??????? ServiceDescriptionImportWarnings warning = importer.Import(nmspace,unit);
??????? CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

??????? CompilerParameters parameter = new CompilerParameters();
??????? parameter.GenerateExecutable = false;
??????? parameter.GenerateInMemory = true;
??????? parameter.ReferencedAssemblies.Add("System.dll");
??????? parameter.ReferencedAssemblies.Add("System.XML.dll");
??????? parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
??????? parameter.ReferencedAssemblies.Add("System.Data.dll");

??????? CompilerResults result = provider.CompileAssemblyFromDom(parameter,unit);

??????? // 5. 使用 Reflection 调用 WebService。
??????? if (!result.Errors.HasErrors)
??????? {
??????????? Assembly asm = result.CompiledAssembly;
??????????? Type t = asm.GetType("WebService"); // 如果在前面为代理类添加了命名空间,此处需要将命名空间添加到类型前面。

??????????? object o = Activator.CreateInstance(t);
??????????? MethodInfo method = t.GetMethod("HelloWorld");
?????????? // Console.WriteLine(method.Invoke(o,null));
??????????? Response.Write(method.Invoke(o,null));
??????? }

??? }
}
五、注意开启webclient服务

?

六、小技巧

在第三步中可开启vs2008 输出窗口测试是否执行了WebService提供的方法。查看System.Diagnostics.Debug.Write(my.username);输出值。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读