您的位置:首页 > 编程语言 > ASP

WCF学习-创建自己的WCF程序(ASP.NET3.5/C#)

2020-03-02 02:16 387 查看

     之前看了很多文章,发现很多人在介绍WCF的过程中使用的都是WinForm程序来做为Sample的,其实做Web开发的人还是占相当大一部分的。随着微软VS2008的发布,更强化了WCF的市场位置。面向服务架构(SOA),而WCF正是基于这一理念而创建成立的。我们平时总是说SOA,大家也都知道SOA这个名字,而真正在开发应用程序时,也未免逃避不了SOA的影子,但什么样的架构才算是真正的采用了SOA呢。这也是我和大家都要共同学习的地方。WCF加快了我们开发基于SOA架构的程序效率。采用了WCF,便在很大程度上实现了SOA化。现在市场上也有很多厂家宣传自己的产品已经完全的实现了SOA化,也不乏这些厂家的根基就是WCF。

     好了,废话不多说了,现在开始我们学习的第一步:创建自己的WCF程序。

     第一步:准备环境

          系统要求:Windows2003 Server/Windows XP

          环境要求:VisualStudio2008(WCF是在.NetFramework3.0之后才发布的)

          运行效果:采用Javascript调用WCF Service方式

    第二步:创建程序

          首先我们先创建一个解决方案,名称为WCFSample.sln.

          我们在安装完成VS2008后,在创建新项目时会出现如下提示框:

          《图片1 WCF_1.1.gif》

          创建完解决方案后,我们添加新项目,名称为WCFSample,此时我们创建的不是普通的ASP.NET Web Application,而是WCF Service Application

          《图片2 WCF_1.2.gif》

          创建完成后,我们的项目文件基本就完成了,这也就是WCF的基本框架。

          此时项目会自动产生几个文件,如IService1.cs, Service1.svc, Service1.svc.cs. 这几个文件都是模板文件,里面包含一些Sample的code.我们以后可以仿照这个Sample完成我们自己的service.

 <一>.文件介绍:

          IService1.cs文件:这个文件是我们用来定义ServiceContract的接口文件。

          Service1.svc文件:这个文件是我们用来host WCF service的文件,默认情况下这个文件是和Service1.svc.cs文件绑定到一起的,我们还可以分别创建svc文件和cs文件,然后使用ServiceHost来绑定这两个文件。(后面我会对ServiceHost做个简单介绍)

          Service1.svc.cs文件:这个文件中我们会定义DataContract,这是我们在Service中用来交换的数据。

          关于Contract的概念,我会在后面做详细介绍,在此先不做过多介绍。

  <二>.我们需要增加一个page文件,新增item,增加一个AJAX WebForm. 然后配置页面中scriptmanager的servicepath, code如下

          

 

Code
<asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/Service1.svc" />
            </Services>
</asp:ScriptManager>

 

 <三>. 我们呢再关注一下Web.Config文件,我们会发现在Web.Config文件中增加了一个字节配置(没有的话可手动修改,默认是有的):          

Code
<system.serviceModel>
    <services>
      <service behaviorConfiguration="WCFSample.Service1Behavior" name="WCFSample.Service1">
        <endpoint address="" binding="webHttpBinding" contract="WCFSample.IService1" behaviorConfiguration="MyEndPointBehavior"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="https">
          <security mode="Transport"/>
        </binding>
      </webHttpBinding>      
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="MyEndPointBehavior">
          <enableWebScript/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="WCFSample.Service1Behavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

 

     我想在这里大家需要注意的是,第一个EndPoint节点中binding,我们没有采用WsHttpBinding,而是采用了webHttpbinding.是因为我们的要求是采用javascript调用WCF服务,而这样的话,我们就需要在EndPoint的behaviorConfiguration中指定Endpointbehavior, 并且在behavior中enableWebScript,这样的话我们才能通过script调用到WCFService,不然的话,在调用过程中就会出现错误信息,提示:对象未定义。

     WebConfig配置完毕后,我们访问URL:http://localhost/wcfsample/js 便可得到客户端代理脚本,里边包含着在客户端如何调用service的脚本。

     这些新增的配置节都是为WCF service而增加的,关于每个配置节的作用和意思我都会在后面加以介绍。

 <四>. 在page中增加调用Service的客户端脚本

     

Code
<script type="text/javascript">
    
      function InvokeWCF() 
      {
        var service = new WCF.ServiceTest();
        service.GetData(12,OnSucceeded,OnFailed,true);
      }
      
      function OnSucceeded(result)
      {
        alert('Invoke succeeded; return value:'+result.toString());
      }
      
      function OnFailed()
      {
        alert('Invoke Failed');        
      }
    
</script>

 

OK, 点击button, 调用成功,如下图:

《图片 WCF_1.3.gif》

示例代码:因目前无法上传文件及图片,现无法提供下载链接,待能上传后,立即更新

 

转载于:https://www.cnblogs.com/yanghuaizhi1982/articles/1351219.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
atlu34184 发布了0 篇原创文章 · 获赞 0 · 访问量 160 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: