2004年10月12日

调用web service如何加载证书

在调用web service时,如果web service需要客户端证书,也就是需要走ssl协议,那么在调用的时候就需要加载上一个客户端证书,这个客户端证书是一个.cer文件,可以从浏览器的证书中导出,在导出的时候不用导出私钥,这样导出的证书是不包含私钥的,也即这个证书文件拷贝到其它机器是无效的。
在调用的时候比较简单。如下:
        // The path to the certificate.
        string Certificate =  "Certificate.cer";

        // Load the certificate into an X509Certificate object.
        X509Certificate cert = X509Certificate.CreateFromCertFile(Certificate);
        
        LoginService srv = new LoginService();
        srv.ClientCertificates.Add(cert);

如果不加载这个证书就会返回403禁止访问错误。
另外为了避免每次new的时候都采用代码加载证书,可以直接修改ws的代理类,比如:
    public LoginService() {
            string urlSetting = System.Configuration.ConfigurationSettings.AppSettings["LoginPlugin.localhost.LoginService"];
            if ((urlSetting != null)) {
                this.Url = string.Concat(urlSetting, "");
            }
            else {
                this.Url = "http://localhost/Jiancha2/Services/LoginService.asmx";
            }
   if (System.Configuration.ConfigurationSettings.AppSettings["ssl"] == "true" && Ocean.Plugins.CertInfo.Cert != null)
   {
            this.ClientCertificates.Add(Ocean.Plugins.CertInfo.Cert);
   }
    }

至于证书服务器和web服务器如何支持ssl,这个在dev-club的电子杂志上有一期有专门的讲解,我就不多说了。

posted @ 2004-10-12 13:45 ocean 阅读(3118) 评论(3) 编辑

关于陈叙远所说的字符串比较问题

从公布的源代码文件中可以发现在.NET中String类型的==和Equals完全一样,实现如下
/// <include file='doc\String.uex' path='docs/doc[@for="String.operatorEQ"]/*' />
        public static bool operator == (String a, String b) {
           return String.Equals(a, b);
        }
所以实际上==这个运算符重载直接用了Equals函数。

posted @ 2004-10-12 13:33 ocean 阅读(704) 评论(4) 编辑

嘿嘿,我是新来的,请大家多多关照

在网上转了那么久,一直没有想起写点什么,最终还是想着写点什么吧,于是就来到了博客,以前只是看博客却从来没有用过博客,现在自己也是一名博客了,要和大家一起学习了。希望大家多多关照呀。
另外我是dev-club的script斑竹,.net版板斧和asp版板斧,当然我这个斑竹当的一般般了,不要见笑。在dev-club上我的id是ocean2001。
这就算是我的第一篇博客吧,然后我还要研究一下这个东东怎么使用,嘿嘿。

posted @ 2004-10-12 11:35 ocean 阅读(349) 评论(0) 编辑