【WCF】如何将WCF部署到远程服务器
一、前言
最近需要将自己写的WCF服务部署到远程服务器上,也就是公网上。宿主是IIS,在配置成功之前遇到了很多问题,问题如下:
1. WCF该怎么宿主在IIS上,为何会出现 400 Bad Request
2. 防火墙如何开放
3. 为何我能在客户端引用服务,但是运行时依然提示Soap操作错误,404 Not Found
那么接下来,我就告诉大家我走过的坑,也避免了百度上各种司机瞎带路。(网上好多其实是本地部署,Localhost谁都会,VS直接Debug都行)
二、准备阶段
首先你要配置好的你的web.config,web.config的配置正确与否直接影响你WCF部署的成功与否。这里我可以提供一个我的例子,供大家参考:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<!--
通过 <authentication> 节,可以配置
ASP.NET 用于识别来访用户身份的
安全验证模式。
-->
<authentication mode="Windows"/>
<!--
如果在执行请求的过程中出现未处理的错误,
则可以通过 <customErrors> 节
配置相应的处理步骤。具体来说,
开发人员可以通过该节配置
将取代错误堆栈跟踪显示的 HTML 错误页。 <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="" redirect="NoAccess.htm" />
<error statusCode="" redirect="FileNotFound.htm" />
</customErrors>
-->
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
<!--
在 Internet 信息服务 7.0 下运行 ASP.NET AJAX 时 system.webServer 节
是必需的。而对于早期版本的 IIS,此节并不是必需的。
-->
<system.webServer>
<!--
若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
-->
<directoryBrowse enabled="true"/>
</system.webServer>
<system.serviceModel> <bindings>
<basicHttpBinding>
<binding name="bindingConfig" closeTimeout="00:30:00" openTimeout="00:30:00"
receiveTimeout="00:30:00" sendTimeout="00:30:00" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize=""
maxReceivedMessageSize=""
maxBufferSize=""
messageEncoding="Text">
<security mode="None"/>
</binding>
</basicHttpBinding>
</bindings> <services>
<service behaviorConfiguration="BiChengUpdateService.Service1Behavior"
name="BiChengUpdateService.UpdateService">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="bindingConfig" name="Endpoint1" contract="BiChengUpdateService.IUpdateService" />
<endpoint address="mex" binding="mexHttpBinding" name="Endpoint2"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="BiChengUpdateService.Service1Behavior">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceThrottling maxConcurrentCalls="" maxConcurrentSessions="" maxConcurrentInstances="" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
这里,一定要注意的是两个地方:
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】如何将WCF部署到远程服务器的更多相关文章
- fis-receiver:一行命令将项目部署到远程服务器
前言 本项目基于FIS2,没了.其实fis项目本身就提供了php版本的范例,这里翻译成node版本. 项目地址:https://github.com/chyingp/fis-receiver 服务端接 ...
- 【SqlServer】如何把本地SqlServer数据库部署到远程服务器上
这里笔者使用的使用SqlServer2012,本机和远程环境均为Win7. 1.选中需要部署的数据库,右击>任务>分离.选中删除连接. 2.现在在左侧的表中就看不见刚才那个数据了. 3.在 ...
- 通过VS2017发布.net core程序并使用Web 部署到远程服务器最新教程
最近一个项目中,为App开发后台接口,技术选型为最新 .net core版本,使用.net core开发web api接口过程中,为了方便app团队成员直接在线调用接口,找了公网上的一台服务器做为ap ...
- xshell+xftp将项目部署到远程服务器上
Xshell 简介: Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议. Xshell 通过互联网到远程主机的 ...
- .Net Core 使用jenkins 部署到远程服务器docker
最近一直在研究docker和kubernetes,小型的项目其实也用不到k8s,本文就是描述如何用jenkins 进行构建asp.net core 3.1项目并且发布到远程服务器docker容器中.本 ...
- web deploy 部署到远程服务器(win server 2008 r2) 遇到的问题。。。。
和他遇到的情况一样,最后也解决了 http://www.cnblogs.com/brucejia/archive/2012/07/30/2615416.html 安装的前提是先看下这里: http:/ ...
- Maven项目配置tomcat插件实现项目自动部署到远程服务器
1.tomcat配置 在tomcat目录中的conf目录下找到tomcat-users.xml配置文件,然后搜索tomcat-users,进行tomcat用户的角色和权限配置,如下: <tomc ...
- WIN8+VS2013编写发布WCF之二(部署)
上文简介了如何建立WCF工程并且调试,下面说一下如何部署. 本文将陆陆续续讲述三种部署方式,随着项目的进展将不断补全. 声明: 用管理员身份打开VS2013,发布前请将程序的.net版本改成与服务器相 ...
- Jenkins部署码云SpringBoot项目到远程服务器
本文是上一篇文章的后续,上一篇只是利用Jenkins部署项目到本地,并启动,本文是将项目部署到远程服务器并执行. 1.环境准备 1.1 安装插件 上一篇文章已经介绍了需要安装的应用及插件,这一篇还需要 ...
随机推荐
- Velocity笔记--使用Velocity获取动态Web项目名的问题
以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- VS15 preview 5打开文件夹自动生成slnx.VC.db SQLite库疑惑?求解答
用VS15 preview 5打开文件夹(详情查看博客http://www.cnblogs.com/zsy/p/5962242.html中配置),文件夹下多一个slnx.VC.db文件,如下图: 本文 ...
- setCapture、releasCapture 浅析
1. setCapture 简介 setCapture可以将鼠标事件锁定在指定的元素上,当元素捕获了鼠标事件后,该事件只能作用在当前元素上. 以下情况会导致事件锁定失败: 当窗口失去焦点时,锁定的事件 ...
- 调用微信退款接口或发红包接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法
我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请检查证书密码是不是和商户号一致 2.IIS设置错误,未加载用户配置文件 解决办法:找到网站使用的应 ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- BPM费控管理解决方案分享
一.方案概述费用是除经营成本外企业的最主要支出,费用管理是财务管理的核心之一,加强企业内控管理如:费用申请.费用报销.费用分摊.费用审批.费用控制和费用支付等,通过科学有效的管理方法规范企业费用管理, ...
- 【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
前言 在之前介绍的流量劫持文章里,曾提到一种『HTTPS 向下降级』的方案 -- 将页面中的 HTTPS 超链接全都替换成 HTTP 版本,让用户始终以明文的形式进行通信. 看到这,也许大家都会想到一 ...
- Linux.NET学习手记(6)
各位读者大家好,好长一段时间没有更新文章了,自从参加工作之后,每天等待去做的工作没完没了,个人的时间也变得奢侈起来,今后要尽量从中脱身,抽更多的时间来完成自己想做的事情(希望如此). 言归正传,上一回 ...