设为首页 收藏本站
查看: 1372|回复: 0

[经验分享] WCF揭秘——简单的WCF开发实例

[复制链接]

尚未签到

发表于 2017-2-19 07:50:27 | 显示全部楼层 |阅读模式
  一、WCF是什么
  WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发。WCF将DCOM、Remoting、Web Service、WSE、MSMQ、AJAX服务、TCP开发集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准。
  二、WCF的优点
  第一,开发的统一性。WCF是对于ASMX, Remoting,Enterprise Service,WSE,MSMQ,TCP开发等技术的整合。WCF是由托管代码编写,无论你是使用TCP通讯,Rmoting通讯还是Web Service ,我们都可以使用统一的模式进行开发,利用WCF来创建面向服务的应用程序。
  第二,WCF能够实现多方互操作。它是使用 SOAP通信机制,这就保证了系统之间的互操作性,即使是运行不同开发语言,也可以跨进程、跨机器甚至于跨平台的通信。例如:使用J2EE的服务器(如WebSphere,WebLogic),应用程序可以在Windows操作系统进行调用,也可以运行在其他的 操作系统,如Sun Solaris,HP Unix,Linux等等。
  第三,提供高效的安全与可信赖度,它可以使用不同的安全认证将WS-Security,WS-Trust和WS-SecureConversation等添加到SOAP消息中。在SOAP的header中增加了WS-ReliableMessaging允许 可信赖的端对端通信。而建立在WS-Coordination和WS-AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions)。

第四,WCF支持多支消息交换模式,如请求-应答,单工,双工等等。另外WCF还支持对等网——利用啮合网络址,客户端能在没有中心控制的情况下找到彼此并实现相互通信。
总括来说,WCF是实现SOA的的一个优秀选择,利用WCF能够实现跨平台,跨语言的无缝连接,从而实现Web服务的相互调用。

三、简单开发实例  在WCF里,各个Application之间的通信是由EndPoint来实现的,EndPoint是WCF实现通信的核心要素。一个WCF Service可由多个EndPoint集合组成,每个EndPoint只能有一种绑定,就是说EndPoint就是通信的入口,客户端和服务端通过 EndPoint交换信息。
    < service  name = " " >
         < endpoint address = ""  binding = " wsHttpBinding "  contract = " myNamespace.IService " >
         </ endpoint >
  </service>
  

  Endpoint由三部分组成:(A) Address 地址,(B)Binding 绑定,(C)Contract 契约。

  • A(Address): 通过一个URI唯一地标识一个Endpoint,并告诉WCF service的调用者如何找到这个Endpoint。


  • B(Binding): 定义了与数据传输相关的传输协议,消息编码,通信模式,可靠性,安全性,事务,互操作性等信息。Framewrok3.5里已经包括以下几种绑定:
DSC0000.png


  • C(Contract):它是有关服务响应的操作及进出消息的格式的语法描述,系统就是通过Contract实现操作的。
  下面为大家讲解一下Hello World的开发例子
  服务器端:
   using  System;
  using  System.ServiceModel;
  namespace myNamespace
  {   
         //在服务器端定义在一个服务契约

         [ServiceContract(Namespace  =   " myNamespace " )]
          public interface  IService
       {  
          [OperationContract]
          String HelloWorld();
       }
  //实现契约
  public class MyService:IService
  {
  public String HelloWorld(string name)
  {
  return "Hello World"+Name;
  }
  }
  }
  服务既可以在代码中实现,也可以在配置文件中实现
  <services>
    <service behaviorConfiguration="ServiceBehavior" name="Service">
  //行为可以影响运行是操作的WCF类,它不公在客户端和服务器启动WCF运行时被执行,还可以在二者之间流动消息时被执行。
     <endpoint address="" binding="wsHttpBinding" contract="IService">
      <identity>
       <dns value="localhost" />
      </identity>
     </endpoint>
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  //mexHttpBinding定义了WCF的元数据。当没有定义元数据时,服务依然能够执行,但不能在HTTP中被发现。
     </service>
</services>
  <behaviors>
    <serviceBehaviors>
       <behavior name="ServiceBehavior">
         <serviceMetadata httpGetEnabled="true" />
         <serviceDebug includeExceptionDetailInFaults="true" />
     </behavior>
    </serviceBehaviors>
</behaviors>
  客户端:
  通过Add Service Reference引用服务地址
DSC0001.png

  添加配置文件:
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
         <binding name="wsHttpBinding_IService" closeTimeout="00:01:00"
               openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
               allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
               maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
  messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"  useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
           <security mode="None">
  <transport clientCredentialType="None" proxyCredentialType="None"  realm="" />
              <message clientCredentialType="UserName" algorithmSuite="Default" />
         </security>
       </binding>
    </basicHttpBinding>
</bindings>
<client>
     <endpoint address="http://localhost/myNamespace.IService.svc"   binding="wsHttpBinding"
  bindingConfiguration="wsHttpBinding_IService"
  contract="myNamespace.IService" name="wsHttpBinding_IService" />
</client>
</system.serviceModel>

最后通过代理直接调用
static void Main(string[] args)
{
     ServiceClient client=new ServiceClient();
     string data=client.HelloWorld("Leslie");
     Console.Writeline(data);
     Console.Read();
}
相关文章
  简单的WCF开发实例
  使用AJAX+WCF进行页面开发
  共享数据契约

  可靠性会话功能
  自定义绑定

  对JAVA与.NET开发有兴趣的朋友欢迎加入QQ群:162338858 DSC0002.png

cnblogs博客园:http://www.cnblogs.com/leslies2/
csdn博客:http://blog.csdn.net/leslies2
原创作品,转载时请注明作者及出处
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-344013-1-1.html 上篇帖子: SOA面向服务架构——SOA的概念 下篇帖子: 架构师,如何从梦想变成现实?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表