sen

导航

如前一章节大部分一下,只是有如下部分不一样

1,把第一节中的绑定的安全模式重新设置 如下

 <!--  加上下面的bindings 配置结点 开始-->
    <bindings >
      <wsHttpBinding >
        <binding  name ="mybehaviorConfiguration">
          <security mode ="Transport">
            <transport clientCredentialType="Basic"/><!-- 这里把验证为空改为了Basic-->
          </security>
        </binding>
      </wsHttpBinding> 
    </bindings>
    <!-- 加上下面的bindings 配置结点 结束 -->

2,update service reference (更新一下客户端配置文件app.config)

其实只改了一处地方:

由<transport clientCredentialType="None"

改<transport clientCredentialType="Basic"

3,客户端增加验证代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;/////////////////
using System.Net.Security;///////////////
using System.Security.Cryptography.X509Certificates;//加上X509证书命名空间

namespace WCFClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                WCFServer.Service1Client wcfClient = new WCFClient.WCFServer.Service1Client();
                string strReturn = "send to server String !!";
                //在这里做了身份验证的动作 (在前一课的基础上增加下面两句)
                wcfClient.ClientCredentials.UserName.UserName = "Administrator";
                wcfClient.ClientCredentials.UserName.Password = "aA";

                //这下面这一步非常关键,它重写了服务器的验证方法,即不要验证,直接发送请求到服务器端
                //重写验证服务端证书的方法。
                System.Net.ServicePointManager.ServerCertificateValidationCallback  += MyCertificateValidate;
                strReturn = wcfClient.GetData(strReturn );
                Console.Write(strReturn);
                Console.Read();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception : {0}", e.Message);
            }
            Console.WriteLine("Press any key to exit");
            Console.Read();
           
        }
        private static bool MyCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
        {
            // trust any certificate!!! 
            System.Console.WriteLine("Warning, trust any certificate");
            return true;
        }
    }

}

至此Windows身份验证的WCF也完成了