.Net WCF服务部署IIS详细解析
官方解析:Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
一、WCF服务的创建
第一步:创建WCF项目
创建完成之后,自动帮我们生成这些文件,2个类,一个接口,一个接口的实现,还有一个App.config配置文件(WCF具体的配置信息都在这个目录下)
IService1.cs
注:等会将WCF发布到IIS上涉及到网络传输,将对象持久化写到磁盘上,那么我们就需要序列化,实体类、自定义属性、类名上打上相应的标签
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.Text; 7 8 namespace WCFDemo 9 { 10 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 11 [ServiceContract] 12 public interface IService1 13 { 14 [OperationContract] 15 string GetData(int value); 16 17 [OperationContract] 18 CompositeType GetDataUsingDataContract(CompositeType composite); 19 20 // TODO: 在此添加您的服务操作 21 } 22 23 // 使用下面示例中说明的数据约定将复合类型添加到服务操作。 24 // 可以将 XSD 文件添加到项目中。在生成项目后,可以通过命名空间“WCFDemo.ContractType”直接使用其中定义的数据类型。 25 [DataContract] 26 public class CompositeType 27 { 28 bool boolValue = true; 29 string stringValue = "Hello "; 30 31 [DataMember] 32 public bool BoolValue 33 { 34 get { return boolValue; } 35 set { boolValue = value; } 36 } 37 38 [DataMember] 39 public string StringValue 40 { 41 get { return stringValue; } 42 set { stringValue = value; } 43 } 44 } 45 }
Service1.cs
注:具体接口实现
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.Text; 7 8 namespace WCFDemo 9 { 10 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。 11 public class Service1 : IService1 12 { 13 public string GetData(int value) 14 { 15 return string.Format("You entered: {0}", value); 16 } 17 18 public CompositeType GetDataUsingDataContract(CompositeType composite) 19 { 20 if (composite == null) 21 { 22 throw new ArgumentNullException("composite"); 23 } 24 if (composite.BoolValue) 25 { 26 composite.StringValue += "Suffix"; 27 } 28 return composite; 29 } 30 } 31 }
App.config
注:http://localhost:8733/Design_Time_Addresses/WCFDemo/Service1/这个地址也就是我们发布到IIS上的服务地址,可修改,视情况而定
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 4 <appSettings> 5 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 6 </appSettings> 7 <system.web> 8 <compilation debug="true" /> 9 </system.web> 10 <!-- 部署服务库项目时,必须将配置文件的内容添加到 11 主机的 app.config 文件中。System.Configuration 不支持库的配置文件。--> 12 <system.serviceModel> 13 <services> 14 <service name="WCFDemo.Service1"> 15 <endpoint address="" binding="basicHttpBinding" contract="WCFDemo.IService1"> 16 <identity> 17 <dns value="localhost" /> 18 </identity> 19 </endpoint> 20 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 21 <host> 22 <baseAddresses> 23 <add baseAddress="http://localhost:8733/Design_Time_Addresses/WCFDemo/Service1/" /> 24 </baseAddresses> 25 </host> 26 </service> 27 </services> 28 <behaviors> 29 <serviceBehaviors> 30 <behavior> 31 <!-- 为避免泄漏元数据信息, 32 请在部署前将以下值设置为 false --> 33 <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> 34 <!-- 要接收故障异常详细信息以进行调试, 35 请将以下值设置为 true。在部署前设置为 false 36 以避免泄漏异常信息--> 37 <serviceDebug includeExceptionDetailInFaults="False" /> 38 </behavior> 39 </serviceBehaviors> 40 </behaviors> 41 </system.serviceModel> 42 43 </configuration>
如果我们想在创建一个WCF服务怎么办呢?
只需,在项目上,右键->添加->新建项->WCF服务即可,自动会帮我们生成一个接口、一个实现接口类、App.config会多加一些配置信息
第二步:调试,用vs自带的测试工具测试服务是否可行
项目上:右键->调试->启动新实例
之后会出现如下界面
开始测试
到目前为止,WCF服务已经配置好了,下面我们将WCF服务发布到IIS上
二、WCF的发布
第一步:发布WCF服务
项目上:右键->发布
第二步:指定位置
发布后的文件
三、安装IIS(已安装,请忽略安装步骤)
Win10下安装
控制面板->程序->启用或关闭Windows功能
重点:
HTTP错误一定要勾选,否则出现错误时不能够提示错误,这个是非常严重的”
四、WCF服务部署IIS上
第一步:注册WCF组件
如何看是否已经注册了WCF组件,选择:Default Web Site==》功能视图==》处理程序映射,然后再查看*.svc 后缀的文件是否被svc-Integrated 或 svc-ISAPI-4.0_64/32bit 程序处理:
因为我已经将WCF组件注册到IIS上了,没有的请注册
cmd(管理员运行):ServiceModelReg.exe –i
第二步:aspnet_regiis.exe注册IIS
由于我们使用的.net framework4.0以上的框架开发的应用程序,但是系统只默认注册了.NET Framework v2.0.50727,如果不注册相应的IIS那么我们访问界面时会弹出以下的错误。
cmd(管理员运行):aspnet_regiis.exe –i
第三步:为应用程序添加应用程序池
右键->添加应用程序池
第四步:添加网站
选择应用池
为了保证当前网站的安全,需要进行权限验证,点击“连接为”,并按照下面的步骤一次输入用户名、密码,然后选择确定。(这一步可忽略)
确定完成后点击“测试设置”出现下图所示的界面时表示当前身份验证成功。
第五步:浏览当前网站
可能会出这个错误
查阅资料,发生这个错误的原因在于安装了高版本的.net framework 导致这种错误,可以尝试通过下面的方法解决:
解决方案
1 路径:C:\Windows\System32\inetsrv\config 2 文件:applicationHost.config
找到最后一行代码,在managedHandler 加上“,runtimeVersionv2.0″ 即可
1 <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
然后在cmd(管理员):
1 第一步:cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 2 第二步:aspnet_regiis.exe -iru 3 4 到第二步为止,基本上都可以解决,重启.svc即可
哎。。。。Win10系统事情在多,下面开始演示如何解决这个问题
百度解决方案如下,利用dism工具依次执行下面命令即可
1 cmd(管理员): 2 3 dism /online /enable-feature /featurename:IIS-ISAPIFilter 4 5 dism /online /enable-feature /featurename:IIS-ISAPIExtensions 6 7 dism /online /enable-feature /featurename:IIS-NetFxExtensibility45 8 9 dism /online /enable-feature /featurename:IIS-ASPNET45