如何将WCF服务部署到远程服务器
一、前言
最近需要将自己写的WCF服务部署到远程服务器上,也就是公网上。宿主是IIS,在配置成功之前遇到了很多问题,问题如下:
1. WCF该怎么宿主在IIS上,为何会出现 400 Bad Request
2. 防火墙如何开放
3. 为何我能在客户端引用服务,但是运行时依然提示Soap操作错误,404 Not Found
那么接下来,我就告诉大家我走过的坑,也避免了百度上各种司机瞎带路。(网上好多其实是本地部署,Localhost谁都会,VS直接Debug都行)
二、准备阶段
首先你要配置好的你的web.config,web.config的配置正确与否直接影响你WCF部署的成功与否。这里我可以提供一个我的例子,供大家参考:
复制代码
1 <?xml version="1.0"?>
2
3
4
5
6
7
12
13
25
26
27
31
32
36
37
38
39
40
41
42
43 receiveTimeout="00:30:00" sendTimeout="00:30:00" hostNameComparisonMode="StrongWildcard"
44 maxBufferPoolSize="2147483647"
45 maxReceivedMessageSize="2147483647"
46 maxBufferSize="2147483647"
47 messageEncoding="Text">
48
49
50
51
52
53
54
55
56 name="BiChengUpdateService.UpdateService">
57
58 bindingConfiguration="bindingConfig" name="Endpoint1" contract="BiChengUpdateService.IUpdateService" />
59
60 contract="IMetadataExchange" />
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
复制代码
这里,一定要注意的是两个地方:
1. Endpoint address
2. MultipleSiteBindingEnabled
问:web.config里有两个Endpoint address, 一个是mex(这个我们不管),另一个是”空”(这个特别重要),为什么要设成空值呢?
难道部署在远程服务器上不应该写的是服务器的IP地址吗?
答:错!这个WCF所部署的IP地址和其相应的端口我们交给IIS即可。
问:如果我在Endpoint address写了服务器的IP地址及端口,例如:114.112.133.23:2037/UpdateserIve.svc会如何?
答:那你就掉坑里了,如果这样写,客户端确实可以引用你的服务,但是在114.112.133.23:2037/UpdateserIve.svc?wsdl(用浏览器打开),
看最后一行,你会发现你的Soap Address会是这个尿性:114.112.133.23:2037/UpdateserIve.svc/114.112.133.23:2037/UpdateserIve.svc
这明显地址有复制了一遍嘛!!!然后客户端的会出现Soap 操作错误,具体的错误Message为404 Not Found。
配置好上述config后,我们在远程服务器硬盘上新建一个文件夹,放置发布服务时需要的文件,一共三个:bin, .svc 以及web.config
bin文件主要放置你在WCF服务中生成的dll,其实你编译完WCF服务项目后,直接把bin文件拷贝了就行。
三、IIS配置
1. 打开远程服务器的IIS,找到“处理程序映射”,看看有没有这个:
没的话,这个可以百度一下,我就不赘述了,这步没司机会坑你。
2. 添加一个应用程序池,专门给你部署的WCF服务使用:
托管管道模式为集成!请注意,你的WCF项目编译时也要一致!
3. 新建网站,配置网站的物理地址:
物理地址就是之前新建的文件夹,应用程序池就是我们之前刚建的应用程序池。这里没显示出.svc及web.config,网站右键切换到内容视图即可
4. IIS的配置端口:
IP地址不要写你的服务器公网地址,会出现400 Bad Request,直接选择全部未分配!
四、防火墙设置
有百度大神说把防火墙关了,关你大爷,服务器这么重要关什么防火墙。假设你要用7293端口,你只要在防火墙开放这个端口即可。
首先,你的防火墙一定要能允许WCF运行:
其次,新建入站规则,点击端口,开放出你所需要的WCF端口即可!
五、总结
WCF既要求你会写代码,又要你会配置,最后还得要求你会部署。总结下这几个步骤:
1. 写好代码,IServiceT以及ServiceT.svc
2. 配置好你的web.config,这个是核心,建议多看看博园里大神的分析与指导。
3. IIS的配置,应用程序池->处理程序映射->新建网站->物理路径->IP及端口
4. 防火墙配置,是否允许WCF->新建入站规则,开放指定的WCF端口
5. 远程服务器WCF配置完后,在你客户端电脑上去访问页面:XXX.XXX.XXX.XX:XX/YYY.svc ,
如果正常:继续在该Url后添上“?wsdl”,即:
XXX.XXX.XXX.XX:XX/YYY.svc?wsdl,查看网页最下方的Soap Address是否为XXX.XXX.XXX.XX:XX/YYY.svc
如果是机器名:win2008:XX/YYY.svc,那你肯定第二步没做好!
如果不正常:第三步就有问题了
如何将WCF服务部署到远程服务器