.Net WCF服务部署IIS详细解析

  官方解析:Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。

一、WCF服务的创建

第一步:创建WCF项目

.Net WCF服务部署IIS详细解析_第1张图片

 

 创建完成之后,自动帮我们生成这些文件,2个类,一个接口,一个接口的实现,还有一个App.config配置文件(WCF具体的配置信息都在这个目录下)

.Net WCF服务部署IIS详细解析_第2张图片

 

 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 "1.0" encoding="utf-8" ?>
 2 
 3 
 4   
 5     "aspnet:UseTaskFriendlySynchronizationContext" value="true" />
 6   
 7   
 8     "true" />
 9   
10   
12   
13     
14       "WCFDemo.Service1">
15         "" binding="basicHttpBinding" contract="WCFDemo.IService1">
16           
17             "localhost" />
18           
19         
20         "mex" binding="mexHttpBinding" contract="IMetadataExchange" />
21         
22           
23             "http://localhost:8733/Design_Time_Addresses/WCFDemo/Service1/" />
24           
25         
26       
27     
28     
29       
30         
31           
33           "True" httpsGetEnabled="True"/>
34           
37           "False" />
38         
39       
40     
41   
42 
43 

如果我们想在创建一个WCF服务怎么办呢?

只需,在项目上,右键->添加->新建项->WCF服务即可,自动会帮我们生成一个接口、一个实现接口类、App.config会多加一些配置信息

.Net WCF服务部署IIS详细解析_第3张图片

 

 第二步:调试,用vs自带的测试工具测试服务是否可行

项目上:右键->调试->启动新实例

 

 之后会出现如下界面

.Net WCF服务部署IIS详细解析_第4张图片

 

 开始测试

.Net WCF服务部署IIS详细解析_第5张图片

 

 到目前为止,WCF服务已经配置好了,下面我们将WCF服务发布到IIS上

二、WCF的发布

第一步:发布WCF服务

项目上:右键->发布

 

 第二步:指定位置

.Net WCF服务部署IIS详细解析_第6张图片

 

 发布后的文件

.Net WCF服务部署IIS详细解析_第7张图片

 

 .Net WCF服务部署IIS详细解析_第8张图片

 

 三、安装IIS(已安装,请忽略安装步骤)

Win10下安装

控制面板->程序->启用或关闭Windows功能

.Net WCF服务部署IIS详细解析_第9张图片

 

 重点:

HTTP错误一定要勾选,否则出现错误时不能够提示错误,这个是非常严重的”

.Net WCF服务部署IIS详细解析_第10张图片

 

 四、WCF服务部署IIS上

第一步:注册WCF组件

如何看是否已经注册了WCF组件,选择:Default Web Site==》功能视图==》处理程序映射,然后再查看*.svc 后缀的文件是否被svc-Integrated 或 svc-ISAPI-4.0_64/32bit 程序处理:

.Net WCF服务部署IIS详细解析_第11张图片

 

 .Net WCF服务部署IIS详细解析_第12张图片

因为我已经将WCF组件注册到IIS上了,没有的请注册

cmd(管理员运行):ServiceModelReg.exe  –i

.Net WCF服务部署IIS详细解析_第13张图片

 

 第二步:aspnet_regiis.exe注册IIS

  由于我们使用的.net framework4.0以上的框架开发的应用程序,但是系统只默认注册了.NET Framework v2.0.50727,如果不注册相应的IIS那么我们访问界面时会弹出以下的错误。

 

 .Net WCF服务部署IIS详细解析_第14张图片

 

 cmd(管理员运行):aspnet_regiis.exe  –i

.Net WCF服务部署IIS详细解析_第15张图片

 

 第三步:为应用程序添加应用程序池

右键->添加应用程序池

.Net WCF服务部署IIS详细解析_第16张图片

 

 第四步:添加网站

.Net WCF服务部署IIS详细解析_第17张图片

 

 选择应用池

.Net WCF服务部署IIS详细解析_第18张图片

为了保证当前网站的安全,需要进行权限验证,点击“连接为”,并按照下面的步骤一次输入用户名、密码,然后选择确定。(这一步可忽略)

.Net WCF服务部署IIS详细解析_第19张图片

确定完成后点击“测试设置”出现下图所示的界面时表示当前身份验证成功。

 .Net WCF服务部署IIS详细解析_第20张图片

 

 第五步:浏览当前网站

.Net WCF服务部署IIS详细解析_第21张图片

 

 可能会出这个错误

.Net WCF服务部署IIS详细解析_第22张图片

 

查阅资料,发生这个错误的原因在于安装了高版本的.net framework 导致这种错误,可以尝试通过下面的方法解决: 

解决方案

 

1 路径:C:\Windows\System32\inetsrv\config
2 文件:applicationHost.config

.Net WCF服务部署IIS详细解析_第23张图片

 

 找到最后一行代码,在managedHandler 加上“,runtimeVersionv2.0" 即可.Net WCF服务部署IIS详细解析_第24张图片

1 "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即可

.Net WCF服务部署IIS详细解析_第25张图片

 

 哎。。。。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

.Net WCF服务部署IIS详细解析_第26张图片

 

你可能感兴趣的:(.Net WCF服务部署IIS详细解析)