C#调用WebService实例和支出

1.1、Web Service基本概念

书Adam The Definitive Guide to HTML5

Web Service也叫XML Web ServiceWebService是一种可以接受从Internet或者Intranet上的任何系统中传送过来的呼吁,轻量级的独门的广播发表技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件举行求证,并透过UDDI实行挂号。

Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4

XML:(Extensible 马克up
Language)扩张型可标记语言。面向长时间的暂时数据处理、面向万维网络,是Soap的底子。

 

Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service的通讯协议。当用户通过UDDI找到您的WSDL描述文档后,他透过方可SOAP调用你建立的Web服务中的一个或多少个操作。SOAP是XML文档方式的调用方法的正规化,它可以支撑差别的底层接口,像HTTP(S)或者SMTP。

到此停止,大家早就学了怎么ASP.NET
MVC框架会出现,认识了建筑和潜在的筹划目的。大家曾经做了一个很好的测试驱动的实际的电子商务应哟那一个。现在是时候打开钩子,揭露框架机制的享有细节。

WSDL:(Web 瑟维斯s Description Language) WSDL 文件是一个 XML
文档,用于申明一(Meadjohnson)组 SOAP
新闻以及怎么着互换那么些新闻。一大半景况下由软件自动生成和动用。

在本书的第二局地,我们关心细节。从公布一个ASP.NET
MVC程序的结构,和行使请求处理管道开头。接着关切各类特性个体,如routing,controller,action,MVC
view系统,带有领域模型的MVC的做事章程。

UDDI (Universal Description, Discovery, and Integration)
是一个重中之重针对Web服务供应商和使用者的新品类。在用户可以调用Web服务此前,必须确定那几个服务内富含怎么样商务方法,找到被调用的接口定义,还要在服务端来编排软件,UDDI是一种依照描述文档来率领系统查找相应服务的建制。UDDI利用SOAP新闻机制(标准的XML/HTTP)来公布,编辑,浏览以及查找注册音信。它选取XML格式来封装种种分化类其余数目,并且发送到注册宗旨仍然由登记中央来回到须求的数码。

在那有些的最后两张,大家见面到哪些在MVC程序中动用AJAX和jQuery。

1.2、XML Web Service的特点

概述MVC项目

Web Service的关键目的是跨平台的可互操作性。为了兑现这一对象,Web Service完全按照XML(可增加标记语言)、XSD(XML
Schema)等独立于阳台、独立于软件供应商的正式,是创办可互操作的、分布式应用程序的新平台。因而使用Web
Service有诸多独到之处:

在大家追究指定MVC特性此前,要提供部分卓绝的条件上下文。本章我们概述ASP.NET
MVC应用的协会和本质,包含默许项目布局和必须坚守的命名规范。

1、跨防火墙的通讯

1 使用VS MVC项目模板

假如应用程序有广大的用户,而且分布在世界各州,那么客户端和服务器之间的通讯将是一个讨厌的难题。因为客户端和服务器之间平时会有防火墙或者代理服务器。传统的做法是,接纳用浏览器作为客户端,写下一大堆ASP页面,把应用程序的高中级层暴露给最后用户。那样做的结果是支付难度大,程序很难有限辅助。
若是客户端代码不再那样凭借于HTML表单,客户端的编程就大约多了。借使中间层组件换成Web
Service的话,就足以从用户界面直接调用中间层组件,从而节省建立ASP页面的那一步。要调用Web
Service,可以一向动用Microsoft SOAP
Toolkit或.net那样的SOAP客户端,也可以使用自己支付的SOAP客户端,然后把它和应用程序连接起来。不仅减少了开发周期,还减弱了代码复杂度,并能够升高应用程序的可维护性。同时,应用程序也不再要求在每趟调用中间层组件时,都跳转到相应的”结果页”。

当创制一个新的MVC3类型,VS让你挑选Empty,Internet Application,Internet
Application。Empty项目模板,会成立相对较少的文书和路线,给你小小的的协会。

2、应用程序集成

在那些对话框上,可以拔取HTML5,微软曾经上马添加HTML5到VS。大家忽视了那个选项,MVC框架。

公司级的应用程序开发者都知晓,公司里平时都要把用差距语言写成的、在分裂平台上运行的各样程序集成起来,而那种购并将开支很大的支效力量。应用程序平日索要从运行的一台主机上的程序中获取数据;或者把数据发送到主机或其余平台应用程序中去。即便在同一个阳台上,差别软件厂商生产的种种软件也时不时要求集成起来。通过Web
Service,应用程序可以用专业的法门把作用和多少”揭破”出来,供其他应用程序使用。

当使用Internet或Intranet应用模板,可以成立单元测试作为VS解决方案的一部分。那五个模板的分裂之处在于身份认证机制。

XML Web services 提供了在松耦合环境中采纳标准协议(HTTP、XML、SOAP 和
WSDL)互换音信的力量。音讯可以是结构化的、带项目标,也足以是不敢苟同定义的。

Folder or File Description Notes
/App_Data 这个路径是放置private data,如XML文件或数据库 IIS不会提供这个路径的环境上下文
/bin MVC程序编译过的装配放在这里,和GAC里没有的引用装配 IIS不会提供这个路径的环境上下文。不会再解决方案浏览器中看到bin路径,除非点击show all files按钮
/Content 存放静态上下的地方,如CSS文件和图片 这是个约定,但不是必须的。你可以把静态上下文放在任何地方
/Controllers 这是controller类的地方 这是约定。你可以把controller类放在任何地方,因为他们都被编译到同一个装配里
/Models 这是放置视图模型和领域模型类的地方,尽管简单的应用受益于在专用的项目中创建领域模型 这是约定。你可以定义你的模型类放在地方或单独的项目中
/Scripts 这个路径是放置JavaScript库。VS默认添加jQuery和Microsoft AJAX helpers 这是约定。你可以吧script文件放在任何位置,它们会作为其他类型的静态环境上下文
/Views 这个路径放置视图和局部视图,一般放置在它controller名字的文件家中 /View/Web.config文件预防IIS提供这些路径的上下文。View必须通过action方法被渲染
/Views/Shared 这个路径放置共享的布局和视图  
/Views/Web.config 这不是应用程序的配置文件。它包含views在ASP.NET中工作所必须的配置,防止IIS直接提供views  
/Global.asax 这是全局ASP.NET应用类,它的后端类Global.asax.cs是注册路由配置的地方。像配置任何代码一样运行一样,能够在程序初始化时运行,关闭,或当未经处理的异常发生 Global.asax文件在MVC应用中,和Web Form应用中的角色一样
/Web.config 这是应用的配置文件。 与Web Form应用中的角色一样

3、B2B的集成

MVC应用陈设拷贝文件夹结构到web
server。处于安全的缘故,IIS不提供Web.config,bin,App_code,App_GlobalResources,App_LocalResources,App_WebReferences,App_Data,App_Browsers这么些途径中的文件。IIS也会把.asax
,.ascx,.sitemap,.resx,.mdb,.mdf,.ldf,.csproj过滤掉。若是想要调整项目标结构,必须保障不在URLs中运用那几个名字和扩充名。

B2B 指的是Business to Business,as in businesses doing business with
other
businesses,商家(泛指公司)对合营社的电子商务,即公司与商家之间通过网络开展产品、服务及音信的置换。通俗的布道是指开展电子商务贸易的供需双方都是店铺(或集团、集团),她们运用了Internet的技术或各类商务互联网平台,落成商务交易的进程。

Folder or File Description
/Areas 区域,是把一个大应用分隔成小片的方法。
/App_GlobalResources
/App_LocalResources
这些文件包含本地化Web Forms页面所需要的资源文件
/App_Browsers 这个文件夹包含.browser XML文件,它是描述如何识别指定的web浏览器,已经这个浏览器能干什么
/App_Thems 这个文件夹包含Web Forms主题,包含.skin文件,影响Web Forms如何控制渲染
   

Web Service是B2B集成成功的关键。通过Web
Service,公司得以只需把关键的商务应用”揭示”给指定的供应商和客户,就可以了,Web
Service运行在Internet上,在世界其余地点都可自由完毕,其运作开支就绝对较低。Web
Service只是B2B集成的一个第一部分,还索要过多其余的部分才能兑现合龙。
用Web
Service来完结B2B集成的最大利益在于可以自由完成互操作性。只要把商务逻辑”揭示”出来,成为Web
瑟维斯,就足以让其他指定的合营伙伴调用那些商务逻辑,而随便他们的种类在怎样平台上运行,使用什么支出语言。那样就大大减弱了花在B2B集成上的岁月和开销。

除去/Areas,表中的其它项是大旨ASP.NET平台,和MVC应用不是专门有关。

4、软件和数量重用

1.1 使用Internet和Intranet应用控制器

Web Service在允许重用代码的同时,可以拔取代码背后的数目。使用Web
Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这么些零部件;只须求直接调用远端的Web
Service就足以了。另一种软件重用的情形是,把一些个应用程序的法力集成起来,通过Web
Service”暴光”出来,就足以万分不难地把拥有这一个效率都合并到你的派系站点中,为用户提供一个联合的、友好的界面。
可以在应用程序中利用第三方的Web Service提供的成效,也可以把团结的应用程序成效通过Web Service提要求别人。二种意况下,都得以引用代码和代码背后的数据。

那四个模板都有HomeController,它可以渲染Home页面和About页面。那一个页面使用默许布局变化。

从以上论述可以看出,Web Service在经过Web举行互操作或远程调用的时候是最有效的。可是,也有一对场合,Web
Service根本不可能牵动其余功利,Web Service有须臾间缺陷:

Internet应用模板还含有AccountController,它同意访问者注册,登录。它使用表单身份验证,保持用户是不是登录的轨道。它应用ASP.NET主题会员设施,记录登记用户的列表。会员设施会在第四回有人尝试着注册或登录时,在/App_Data文件夹试着创制SQL
Server Express基于数据库的文件。即使没有安装还要运行SQL
Server,那样会在长日子暂停后败北。AccountController也有actions和views,能够让注册用户改变密码。Intranet
Application模板省略AccountController,因为它愿意利用Windows
domain/Active Directory基础设施管理账户和密码。

1、 单机应用程序

1.2 理解MVC约定

当下,集团和村办还选取爱惜重桌面应用程序。其中有的只必要与本机上的别样程序通讯。在那种气象下,最好就不要用Web
Service,只要用本地的API就可以了。COM非凡适合于在那种境况下办事,因为它既小又快。运行在同等台服务器上的服务器软件也是那样。当然Web
Service 也能用在那些场馆,但那样不仅开销太大,而且不会带来任何功利。

在MVC项目中,有三种档次的预订。第一种只是指出您怎么着设置项目标社团。例如,它惯例地将JavaScript文件放在Scripts文件夹。那是任何MVC开发人士期待找到它的地点,也是VS为新MVC项目放置初步化JavaScript文件的地点。可是你能够重命名Scripts文件夹,甚至完全除去它,放置scripts到其余地点。那不会堵住MVC框架运行。

2、 局域网的一部分应用程序

另一个品类的约定来自约定大于配置的法则。那意味着不用明确计划controller和views的关联。只须求一个通晓的controller名字就行了。

在无数利用中,所有的顺序都是在Windows平台下行使COM,都运行在同一个局域网上。在这几个程序里,使用DCOM会比SOAP/HTTP有效得多。与此相就如,如若一个.net先后要一连到局域网上的另一个.net程序,应该使用.net
Remoting。其实在.net Remoting中,也足以指定使用SOAP/HTTP来进展Web
Service 调用。但是最好依然平素通过TCP举行RPC调用,那样会使得得多。

装有约定都能动用自定义视图引擎改变。

1.3、XML Web Service的应用

1.2.1 以下是决定器类的预定

1.初期的 XML Web 瑟维Stone常是足以便宜地融会应用程序的音信来源,如股票价格、天气预告、体育成绩等等。

Controller类的名字务必以Controller结尾,如ProductController。当从MVC
route或HTML
helper方法参照controller,须求制定名字的率先有的,如Product,DefaultControllerFactory类会自动在名字后附加Controller,并开首搜索controller类。可以因此成立自定义的IControllerFactory接口的达成,改变那些行为。

2.以 XML Web 瑟维斯格局提供现有应用程序,可以营造新的、更强大的应用程序,并应用 XML Web
Service 作为协会块。

1.2.2 以下是视图的约定

比如说,用户可以支付一个选购应用程序,以机关获取来自差异供应商的标价音讯,从而使用户能够采用供应商,提交订单,然后跟踪货物的运载,直至收到货物。而供应商的应用程序除了在Web上提供劳动外,还足以行使XML
Web Service检查客户的信用、收取货款,并与货运集团办理货运手续。

视图和局部视图应该在它涉及的控制器名字的公文夹下,如ProductController类的涉及视图应在/View/Product文件夹下。

二、Web Service开发

MVC框架期望action方法的默许视图,应以它的名字命名。例如,List
action方法的涉及视图应叫List.cshtml,假诺接纳ASPX视图引擎是List.aspx。

.net平台内建了对Web Service的支撑,包涵Web
Service的打造和使用。与其余用度平台分裂,使用.net平台,你不须要任何的工具或者SDK就能够形成Web
Service的支付了。.net Framework本身就宏观协理Web
Service,包蕴服务器端的请求处理器和对客户端发送和接受SOAP音讯的支撑。下来大家就一步一步的用Microsoft
Visual Studio .net 20058(后边简称VS.Net 2008)创建和选择一个简易的Web
Service。

默许视图是用来当您在action方法中调用View方法,重返结果。

2.1首选建立 一个webservice 服务实例 :

1 return
View();

VS2008 版本

大家指定一个见仁见智的视图,使用名字

图片 1

1 return
View(“MyOtherView”);

建好之后的页面目录为如下:

我们并未包蕴文件的扩充名,或视图的路子。MVC框架会试着找到那些视图,使用文件名和视图引擎的恢宏名,默许是Razor和ASPX视图引擎。

图片 2

当查找一个视图,MVC框架会招来控制器命名的文书夹,然后找/Views/Shared文件夹。那表示大家可以在不相同的controller中选拔/View/Shared文件夹中的同一个view,并依靠框架找到他们。

打开Service.cs文件  修改成如下图所示:

1.2.3 以下是布局的预定

图片 3

布局的命名约定,是在文书名前加_下划线前缀,这源点于WebMatrix,另一个选用Razor的。布局文件放在/Views/Shared文件夹。VS创设一个名为_Layout.cshtml的布局,作为开头化项目模板的一有的。这些不是被默许使用到具备的视图,通过/Views/_ViewStart.cshtml文件。

下边大家开头运行Service.asmx 文件 

万一不想让默许布局应用到视图,可以转移_ViewStart.cshtml的装置,指定另一个搭架子。

图片 4

1 @{
2 Layout =”~/Views/Shared/MyLayout.cshtml”;
3 } 4
5 @{
6 Layout =null;
7 }

如若出现的是地方的功用表明你的WEBSERVICE运行正确,现在永不忘记这一个服务地点(即浏览器中的地址),其实个人了然webservice相当于一个接口,那个接口当
然是有地点的,往往在支付大家做好的接口发送给客户(附带接口集成文件等),通过客户端调用接口,在劳务器端处理客户的数据
再回到给客户。所以那个地方是一蹴而就的,很显示这几个WEB服务的地址必必要平昔开着,如果断掉的话
会并发什么样情形吗??大家接下去继续在ASP.NET网站怎么样调用那几个服务呢?

2 调试MVC应用

2.2
ASP.NET网站调用WEB服务接口(前提你的WEB服务平素开着,也就是上边建好的ASP.NET
WEB服务网站是运作着的)

我们会显得什么设置调试,创造断点,在程序和单元测试中运作调节。

树立一个ASP.NET网站,那些自己就不多说了。建立一个Add.aspx页面
拉来多个控件:textbox1,textbox2,label分别用来显示整数a,整数b,总括的和用label展现。

2.1 成立项目

最根本的一步是何许添加WEB服务啊。

开立异类型,使用Internet应用模板,选中创设单元测试。在编译格局中选拔调试形式。调试的迅速情势是F5。如若选取修改Web.config文件,编译选项会更新Web.config文件中的debug属性的值为true。

看下图:

1 <system.web>2 <compilation debug=”true”
targetFramework=”4.0″>3 …
4 </compilation>

入选你项目 右键添加WEB此用,

永不在未曾禁用debug设置的情事下,安插程序到生育环境。

图片 5

2.2 调试

地点的地方 就是刚刚大家运行WEBservice 的地点 输入上去 点击前进
右面就会冒出
服务名了。再添加引用OK。大家的WEB服务就添加到大家的网站上来了。

一个未处理的至极会促成调试中断。通过动用try..catch块,可以使一个至极变为处理过的。万分处理是充足管用的编码工具。它用来表示一个方案:一个形式无法到位它的任务,须求通告她的调用者。未处理的百般很坏,它意味着一个我们预料之外没有处理的标准。

如果出现那几个图 就表明您的足够是不利的。

2.3 使用Edit和Continue

图片 6

VS调试特性中最有意思的一个是编写和持续。当调试器终端,你可以编写你的代码,然后继续调试。VS重编译你的次序,重建程序在调试器终端这一阵子的情状。

接下去就是后台代码怎样调用这几个WEB服务了。。。。。。

2.4 启用编辑和后续

自然在后台代码中大家先行实例化创设一个劳务对象。

我们须要在多少个地点启用编辑和后续

代码如下

  • 在VS工具菜单的调试器选项,有编制和继承的节点,保持启用被选中。
  • 在档次性质中,点击Web节点,确保启用编辑和继续被入选。
protected void Button1_Click(object sender, EventArgs e)
   {
       localhost.Service aa = new localhost.Service();
       Label1.Text =Convert.ToString( aa.GetSum(Convert.ToInt32(TextBox1.Text.Trim()), Convert.ToInt32(TextBox2.Text.Trim())));
   }

2.4.1 编辑并一连

 现在大家运行我的add.aspx 页面

当弹出特别后,在exception helper窗口上点击Enable editing
link,改变代码,从调试菜单中选拔Continue。

图片 7

在此刻,VS重编译大家的主次,使得大家的变动被含有在创设进程,重新开动推行,重新创设导致非凡的情况,然后保持健康。浏览器收到结果的渲染。

运作后 输入八个数 点击调用 输出结果 为:32
证实大家调用的WEB服务成功了。。。。

并未编制并持续,大家要停下程序,改变代码,编译横须,重启调试。然后使用浏览体贴复导致调试终端的步调。那是幸免这最要害的结尾一步。复杂的尾巴可能要求广大手续,那样可以节约程序员的风云和头脑清醒。

2.2 现在若是WEB服务关闭了 再运行那些网站会面世什么样处境吧?

3 项目范围的依赖注入

图片 8

在底下的章节,大家会看到稍微分化的法子,MVC框架为您的恢弘提供支撑,自定义如何被呼吁服务。这个都被定义为接口的兑现,或一个基类的派生。

出现上边的动静,表明大家的调用WEB服务败北了,所以大家在调用WEB服务时
要使WEB服务处理运行意况。。

俺们早已见过自定义MVC框架的事例。大家创立DefaultControllerFactory类的派生类NinjectControllerFactory,为了可以使用Ninject创制controller,来治本DI。我们最终能够在先后中行使DI,可是比大家可以的,多了有的代码复制和Ninject
kernels。

局地繁杂的接口和那几个原理大概,依照我们系统的莫过于须要周全WEB服务的效益。

当MVC框架要求创设一个类的实例,它会调用System.Web.Mvc.DependencyResolver类的静态方法。大家可以添加DI贯穿一个MVC程序,通过完成IDependencyResolver接口,并由此DependencyResolver注册偶们的落到实处。通过那种方法,无论何时框架要求创设一个类的实例,它都会调用大家的类,大家得以调用Ninject来创设这些目的。

大家尚无在SpotrsStroe中强化DI,因为我们只想要浮现添加DI到控制器。上面展现怎么样得以已毕IDependencyResolver接口。

1 publicclass
NinjectDependencyResolver : IDependencyResolver 2 {
3 private
IKernel kernel; 4 5 public
NinjectDependencyResolver()
6 { 7 kernel
=new
StandardKernel(); 8 AddBindings(); 9 }
10 11 12 #region
IDependencyResolver 成员13
14 publicobject
GetService(Type serviceType) 15 {
16 return
kernel.TryGet(serviceType); 17 }
18 19 public
IEnumerable<object>
GetServices(Type serviceType) 20 {
21 return
kernel.GetAll(serviceType); 22 }
23 24 #endregion25 26 public
IBindingToSyntax<T>
Bind<T>()
27 { 28 return
kernel.Bind<T>();
29 } 30 31 public
IKernel Kernel 32 { 33 get {
return kernel; } 34 }
35 36 privatevoid
AddBindings() 37 { 38
Bind<IProductRepository>().To<EFProductRepository>();
39 Bind<IAuthProvider>().To<FormsAuthProvider>();
40 41
EmailSettings emailsSettings =new
EmailSettings 42 { 43
WriteAsFile =bool.Parse(ConfigurationManager.AppSettings[“Email.WriteAsFile”]
??”false”)
44 }; 45 46
Bind<IOrderProcessor>().To<EmailOrderProcessor>().WithConstructorArgument(“settings”,
emailsSettings); 47 } 48 }

本条类很粗略。前五个形式是当MVC框架须求类的一个新实例时被调用,大家大致地调用Ninject
kernel传递给请求。大家添加了Bind方法,所以可以从类外面添加绑定。那点一滴是可选的,因为大家也蕴藏AddBindings方法,从构造器中被调用。

后天得以去除NinjectControllerFactory类,并在Global.asax中的Application_Start方法注册更相像的NinjectDependencyResolver类。

1 DependencyResolver.SetResolver(new
NinjectDependencyResolver());

经过这么些设置,大家将Ninject放到了MVC程序的灵魂。偶们可以一而再革新MVC框架的这么些扩大点,但大家不在须求,因为咱们想做的知识介绍DI到请求管道的有些部分。

Leave a Comment.