背景:
1. 使用BasicHttpBing的目的是为了适应.net 2.0项目的存在;
2. 为了保证WCF服务的安全以及接口调用的日志记录及统计,需要进行简单的调用者身份验证;
3. 采用Windows Service作为WCF服务的宿主;
服务端采用安全模式TransportWithMessageCredential, 代码如下(也可以采用配置方式):
<machineName>表示机器名,<domain> 表示服务器所在域的名称,加起来构成完整的计算机名称;Const.HttpsPort 可以随意指定,比如8888;
因为安全模式要求SSL,因此我们要将8888端口绑定证书;
需要一个证书,证书名称必须和完整的计算机名称一致,且根证书需要受信任(或者新建或者加入域的服务器本身就有,可以到证书管理中查找--localmachine--》个人--》证书);
绑定操作这里需要借助一个工具httpcfg.exe,如果服务器没有安装此工具,可以到微软官方下载windows 2003 support tools.
可以先查看当前SSL绑定状态,通过如下命令:
cmd - > httpcfg query ssl
绑定方式:
cmd -> httpcfg set ssl /i 0.0.0.0:8200 /h 42e1ecc4968b8ac362f88cc81f07e4dbd9192a93
42e1ecc4968b8ac362f88cc81f07e4dbd9192a93为证书HASH值,这个可以查看证书属性—》微缩图得到,注意中间没有空格!
这样端口就完成SSL绑定。
服务地址:https://<完整的计算机名称>:<port>/<ServiceName>
客户端就好说了,
.net 2.0及以前版本的系统如何调用:
1. 添加引用Microsoft.Web.Services2(这个DLL是WSE2.0中的);
2. 添加web服务引用,https://<完整的计算机名称>:<port>/<ServiceName>;
3. 更改自动生成的Reference.cs中的服务代理类的继承类,即将System.Web.Services.Protocols.SoapHttpClientProtocol替换为Microsoft.Web.Services2.WebServicesClientProtocol;
注意,重新引用Web服务后,要重新更改!
4. 调用前,需要加入以下代码:
其中GUID字符串对应ApplicationID;
.net 3.0及以后版本的系统如何调用:
1. 添加服务引用,https://<完整的计算机名称>:<port>/<ServiceName>;
2. 调用前加入以下代码: