一,新建WCF服务引用程序

  1,删除.svc文件,全部删除。

  2,新建 IService 类

  1. namespace TestWcf
  2. {
  3. [ServiceContract]
  4. public interface IService
  5. {
  6. [OperationContract]
  7. string DoWork();
  8. }
  9.  
  10. }

  3,实现接口类 Service类

  1. namespace TestWcf
  2. {
  3. public class Service : IService
  4. {
  5. public string DoWork()
  6. {
  7. return "你妹!";
  8. }
  9. }
  10. }

  4,编写配置文件

  1. <system.serviceModel>
  2. <!--添加此节点,否则出现405错误-->
  3. <bindings>
  4. <wsHttpBinding>
  5. <binding name="NoneSecurity"
  6. maxBufferPoolSize="" maxReceivedMessageSize="" useDefaultWebProxy="false">
  7. <readerQuotas maxStringContentLength="" maxArrayLength=""/>
  8. <security mode="None"/>
  9. </binding>
  10. </wsHttpBinding>
  11. </bindings>
  12.  
  13. <behaviors>
  14. <serviceBehaviors>
  15. <behavior name="metadataBehavior">
  16. <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
  17. <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
  18. <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
  19. <serviceDebug includeExceptionDetailInFaults="false"/>
  20. </behavior>
  21. </serviceBehaviors>
  22. </behaviors>
  23.  
  24. <protocolMapping>
  25. <add binding="wsHttpBinding" scheme="http" />
  26. </protocolMapping>
  27.  
  28. <services>
  29. <service name="TestWcf.Service" behaviorConfiguration="metadataBehavior">
  30. <endpoint address="" binding="wsHttpBinding" contract="TestWcf.IService" bindingConfiguration="NoneSecurity">
  31. </endpoint>
  32. <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  33. </service>
  34. </services>
  35.  
  36. <!--无svc文件wcf服务激活-->
  37. <serviceHostingEnvironment>
  38. <serviceActivations>
  39. <add relativeAddress="Service.svc" service="TestWcf.Service"/>
  40. </serviceActivations>
  41. </serviceHostingEnvironment>
  42.  
  43. </system.serviceModel>

  5,注意事项

  以下代码是无.svc,激活WCF服务的关键,WCF4.0的新特性

从消息交换的角度来说,客户端对IIS/WAS寄宿下服务的调用本质上体现在对.svc这个真实存在的物理文件的访问。如果服务尚未激活,WCF最终根据读取请求的物理文件来激活相应的服务。具体来说,就是获 取用于创建ServiceHost的ServiceHostFactory的类型(如果没有通过<%@ServiceHost%>指令的 Factory进行显式设置,默认使用的ServiceHostFactory的类型为 System.ServiceModel.Activation.ServiceHostFactory)。在正确解析出 ServiceHostFactory类型之后,通过反射创建用于寄宿服务的ServiceHost对象。

如果WCF的服务端能够根据请求正确地创建出基于目标服务的ServiceHost,就能解决服务的激活问题。进一步来说,如果服务端能够维护一个 Service/ServiceHostFactory与请求地址之间的映射关系,我们就可以不再需要.svc文件,因为.svc对于服务激活来说就是起 到了这么一个映射的作用。在最新的WCF中,这么一个映射关系可以在配置文件中进行设置。换言之,如果在配置对这个映射关系进行了相应设置之后,我们将不 再需要为服务定义了.svc文件了。

在<system.serviceModel>/<serviceHostingEnvironment>配置节下,具有 一个<serviceActivations>子节点。上述的关于Service/ServiceHostFactory与请求地址之间的映 射关系就定义在这个配置节点下。具体来说,<serviceActivations>配置节下的配置元素具有三个基本的属性,其中 service和factory对用着原来定义在.svc文件中<%@ServiceHost>指令的Service和Factory属性, 而relativeAddress则表示服务相对服务寄宿的IIS站点的地址,该地址必须以.svc为后缀。下面一段配置与上面给出的.svc文件具有相 同的作用,有了这段配置,.svc就不再需要了。

  1. <!--无svc文件wcf服务激活-->
  2. <serviceHostingEnvironment>
  3. <serviceActivations>
  4. <add relativeAddress="Service.svc" service="TestWcf.Service"/>
  5. </serviceActivations>
  6. </serviceHostingEnvironment>

二,不直接引用WCF服务,使用代理类实现对WCF的调用

  1,新建控制台程序,新建客户端代理类,MyClient

  1. namespace WCFClient
  2. {
  3. /// <summary>
  4. /// 用于调用服务的类
  5. /// </summary>
  6. public class MyClient : ClientBase<IService>, IService
  7. {
  8. public MyClient(Binding binding, EndpointAddress edpAddress)
  9. : base(binding, edpAddress)
  10. {
  11.  
  12. }
  13.  
  14. /// <summary>
  15. /// 调用服务端函数
  16. /// </summary>
  17. /// <returns></returns>
  18. public string DoWork()
  19. {
  20. return base.Channel.DoWork();
  21. }
  22.  
  23. }
  24. }

  2,调用测试

  1. namespace WCFClient
  2. {
  3. class Program
  4. {
  5. static EndpointAddress edpHttp = new EndpointAddress("http://10.11.109.7:8001/Service.svc");
  6. static void Main(string[] args)
  7. {
  8. MyClient client = new MyClient(new WSHttpBinding(SecurityMode.None), edpHttp);
  9.  
  10. Console.WriteLine(client.DoWork());
  11.  
  12. Console.ReadKey();
  13. }
  14. }
  15. }

  3,运行结果

这样就可以不需要添加服务引用,而直接纯代码手工实现对WCF的调用。

  

WCF无.SVC文件服务激活,及不添加服务引用调用WCF的更多相关文章

  1. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  2. VS2010中使用Jquery调用Wcf服务读取数据库记录

    VS2010中使用Jquery调用Wcf服务读取数据库记录 开发环境:Window Servere 2008 +SQL SERVE 2008 R2+ IIS7 +VS2010+Jquery1.3.2 ...

  3. [转]学习 WCF (6)--学习调用WCF服务的各种方法

    转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...

  4. WCF服务寄宿IIS与Windows服务 - C#/.NET

    WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...

  5. WCF服务寄宿IIS与Windows服务

      WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...

  6. 调用WCF服务的几种方式

    首先发布了一个名为PersonService的WCF服务.服务契约如下: [ServiceContract]     public interface IPersonService     {     ...

  7. 在 Node.js 上调用 WCF Web 服务

    摘要:有时我们需要在WCF中做一些复杂数据处理和逻辑判断等,这时候就需要在NodeJS中调用WCF服务获取数据,这篇文件介绍如何在Node中调用WCF服务获取数据. Node项目中调用WCF服务获取数 ...

  8. (转)2.4.1 基础知识--添加服务引用与Web引用的区别

    <Web服务开发学习实录>第2章构建ASP.NET Web服务,本章我们将学习创建Web服务的各种方法,并重点对使用Visual Studio创建ASP.NET Web服务和修改Web服务 ...

  9. WCF基础教程之开篇:创建、测试和调用WCF

    一转眼,又半个月没有更新博客了.说实话,最近确实是有点忙.不过即使再忙忙,也要抽空来学习一些东西.最近用WCF比较多,就来跟大家分享一下关于WCF的知识吧!为了让大家都能看懂,照顾一些没有学过WCF的 ...

随机推荐

  1. C# Partial:分部方法和分部类

    using System; namespace Partial { class Program { static void Main(string[] args) { A a = new A(); } ...

  2. Python之__new__方法

    # -*- coding: utf-8 -*- """ Created on Sun Dec 2 11:03:03 2018 Python类构造过程 @author: z ...

  3. WinServerDFS

    DFS提供共享路径统一命名,且文件相互备份,具有高可用性. 1.在相应的服务器上安装服务. --命名空间,复制以及管理控制台的安装 install-windowsfeature fs-dfs-name ...

  4. PostgreSQL远程访问设置

    数据库版本:9.3.23(Windows xp系统) 步骤: 1.需要修改数据库安装目录下的pg_hba.conf文件 修改成: 2.并使用psql执行pg_ctl reload重新加载配置文件

  5. LeetCode算法题-Linked List Cycle(Java实现)

    这是悦乐书的第176次更新,第178篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第35题(顺位题号是141).给定一个链表,确定它是否有一个循环. 本次解题使用的开发工 ...

  6. June 6. 2018 Week 23rd Wednesday

    You are confined only by the walls you build yourself. 限制你的只有你自己筑起的墙. From Andrew Murphy. Let's repe ...

  7. Java JDK与JRE

    JDK与JRE JDK(Java Development Kit):Java开发工具包.包含JRE中的所有内容,以及用于开发小应用程序和应用程序的编译器和调试器等工具. JRE(Java Runtim ...

  8. Angular之模态弹窗ui-bootstrap-modal及轻量级弹窗ngDialog

    ui-bootstrap 中模态 官网 angular-ui-bootstrap   对于ui-bootstrap集成大量指令如折叠ui.bootstrap.accordion.时间插件ui.boot ...

  9. 序列对象(bytearray, bytes,list, str, tuple)

    列表: L.append(x) # x追加到L尾部 L.count(x) # 返回x在L中出现的次数 L.extend(m) # Iterable m的项追加到L末尾 L += m # 功能同L.ex ...

  10. spring boot监控--actuator

    原文地址:http://blog.csdn.net/wh_ouyangshuang/article/details/48048111 spring-boot-actuator模块提供了一个监控和管理生 ...