WCF无.SVC文件服务激活,及不添加服务引用调用WCF
一,新建WCF服务引用程序
1,删除.svc文件,全部删除。
2,新建 IService 类
namespace TestWcf
{
[ServiceContract]
public interface IService
{
[OperationContract]
string DoWork();
} }
3,实现接口类 Service类
namespace TestWcf
{
public class Service : IService
{
public string DoWork()
{
return "你妹!";
}
}
}
4,编写配置文件
<system.serviceModel>
<!--添加此节点,否则出现405错误-->
<bindings>
<wsHttpBinding>
<binding name="NoneSecurity"
maxBufferPoolSize="" maxReceivedMessageSize="" useDefaultWebProxy="false">
<readerQuotas maxStringContentLength="" maxArrayLength=""/>
<security mode="None"/>
</binding>
</wsHttpBinding>
</bindings> <behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors> <protocolMapping>
<add binding="wsHttpBinding" scheme="http" />
</protocolMapping> <services>
<service name="TestWcf.Service" behaviorConfiguration="metadataBehavior">
<endpoint address="" binding="wsHttpBinding" contract="TestWcf.IService" bindingConfiguration="NoneSecurity">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services> <!--无svc文件wcf服务激活-->
<serviceHostingEnvironment>
<serviceActivations>
<add relativeAddress="Service.svc" service="TestWcf.Service"/>
</serviceActivations>
</serviceHostingEnvironment> </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就不再需要了。
<!--无svc文件wcf服务激活-->
<serviceHostingEnvironment>
<serviceActivations>
<add relativeAddress="Service.svc" service="TestWcf.Service"/>
</serviceActivations>
</serviceHostingEnvironment>
二,不直接引用WCF服务,使用代理类实现对WCF的调用
1,新建控制台程序,新建客户端代理类,MyClient
namespace WCFClient
{
/// <summary>
/// 用于调用服务的类
/// </summary>
public class MyClient : ClientBase<IService>, IService
{
public MyClient(Binding binding, EndpointAddress edpAddress)
: base(binding, edpAddress)
{ } /// <summary>
/// 调用服务端函数
/// </summary>
/// <returns></returns>
public string DoWork()
{
return base.Channel.DoWork();
} }
}
2,调用测试
namespace WCFClient
{
class Program
{
static EndpointAddress edpHttp = new EndpointAddress("http://10.11.109.7:8001/Service.svc");
static void Main(string[] args)
{
MyClient client = new MyClient(new WSHttpBinding(SecurityMode.None), edpHttp); Console.WriteLine(client.DoWork()); Console.ReadKey();
}
}
}
3,运行结果

这样就可以不需要添加服务引用,而直接纯代码手工实现对WCF的调用。
WCF无.SVC文件服务激活,及不添加服务引用调用WCF的更多相关文章
- 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代码方式来 ...
 - VS2010中使用Jquery调用Wcf服务读取数据库记录
		
VS2010中使用Jquery调用Wcf服务读取数据库记录 开发环境:Window Servere 2008 +SQL SERVE 2008 R2+ IIS7 +VS2010+Jquery1.3.2 ...
 - [转]学习 WCF (6)--学习调用WCF服务的各种方法
		
转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...
 - WCF服务寄宿IIS与Windows服务 - C#/.NET
		
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...
 - WCF服务寄宿IIS与Windows服务
		
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...
 - 调用WCF服务的几种方式
		
首先发布了一个名为PersonService的WCF服务.服务契约如下: [ServiceContract] public interface IPersonService { ...
 - 在 Node.js 上调用 WCF Web 服务
		
摘要:有时我们需要在WCF中做一些复杂数据处理和逻辑判断等,这时候就需要在NodeJS中调用WCF服务获取数据,这篇文件介绍如何在Node中调用WCF服务获取数据. Node项目中调用WCF服务获取数 ...
 - (转)2.4.1 基础知识--添加服务引用与Web引用的区别
		
<Web服务开发学习实录>第2章构建ASP.NET Web服务,本章我们将学习创建Web服务的各种方法,并重点对使用Visual Studio创建ASP.NET Web服务和修改Web服务 ...
 - WCF基础教程之开篇:创建、测试和调用WCF
		
一转眼,又半个月没有更新博客了.说实话,最近确实是有点忙.不过即使再忙忙,也要抽空来学习一些东西.最近用WCF比较多,就来跟大家分享一下关于WCF的知识吧!为了让大家都能看懂,照顾一些没有学过WCF的 ...
 
随机推荐
- Java:字节流和字符流(输入流和输出流)
			
本文内容: 什么是流 字节流 字符流 首发日期:2018-07-24 什么是流 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道. 输入流是相对程序而言 ...
 - coTurn 运行在Windows平台的方法及服务与客户端运行交互流程和原理
			
coTurn是一个开源的STUN和TURN及ICE服务项目,只是不支持Windows.为了在window平台上使用coTurn源码,需要在windows平台下安装Cygwin环境,并编译coTurn源 ...
 - [20170607]再论Private Strand Flush Not Complete.txt
			
[20170607]再论Private Strand Flush Not Complete.txt --//曾经跟zergduan有过讨论,链接www.itpub.net/thread-2065703 ...
 - 登录views
			
import osimport hashlibfrom django.shortcuts import render,render_to_response,redirect,HttpResponseR ...
 - C#实现CRC校验
			
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web; ...
 - python中根据字符串导入模块module
			
python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...
 - 对Can We MakeOperating SystemsReliable and Secure 的翻译
			
摘要:微内核-相对于大内核(monolithic kernels)来说,由于它的 lower performance,长期以来被认为是不可接受的.而现在,由于它潜 在的高可靠性(higher reli ...
 - Linux:自动删除n天前日志
			
linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...
 - 完美集群监控组合ganglia和nagios
			
Ganglia是伯克利开发的一个集群监控软件.可以监视和显示集群中的节点的各种状态信息,比如如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈 ...
 - 移动端rem  flexible方案
			
一.px 自动转换为rem sublim Text3 下载本项目,比如:git clone https://github.com/flashlizi/cssrem 进入packages目录(在Subl ...