用ftpWebRequest做ftp上传,其中主要代码如下:
    reqFTP.KeepAlive = false;
    reqFTP.UsePassive = true;
    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
    reqFTP.UseBinary = true;
    reqFTP.EnableSsl = true;
 只有我吧ssl加上,就报错误“System.Net.WebException: 基础连接已经关闭: 服务器提交了协议冲突。”
怎么解决啊。服务器端用的FileZilla,证书也是用fileZilla生成的。

解决方案 »

  1.   

    在配置文件中加入
    <configuration>
    ...
    <system.net>
        <settings>
          <httpWebRequest useUnsafeHeaderParsing="true" />
        </settings>
     </system.net>
    </configuration>参考http://forums.msdn.microsoft.com/en-US/netfxnetcom/thread/ff098248-551c-4da9-8ba5-358a9f8ccc57/
      

  2.   

    我用webservice做ssl的时候也遇到过这个问题,你可以参考下我的解决方法将服务器颁发机构的根证书在客户端安装下,放到可信任的根证书颁发中心。然后你添加个安全后掉函数就可以看到ssl通信成功了using System.Net;
    using System.Net.Security;
    //安全验证回调函数
            private static bool RemoteCertificateCallback(Object sender, X509Certificate certificate,
                                                         X509Chain chain,
                                                         SslPolicyErrors sslPolicyErrors)
            {
                if (sslPolicyErrors == SslPolicyErrors.None)
                    return true;
                MessageBox.Show(sslPolicyErrors.ToString());
                return false;
            }
    //添加回调函数
    ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateCallback;我觉得webservice里使用了System.Net.Security;命名空间应该对你这个程序有效
      

  3.   


    朋友你用抓包工具看过吗,ssl还有作用吗?
      

  4.   

    在配置文件中加入这个<httpWebRequest useUnsafeHeaderParsing="true" />  早都试过了没用
      

  5.   

    ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateCallback;request.Credentials = new NetworkCredential(aUser, aPsw);
    request.Proxy = null;
    request.KeepAlive = false;
    request.UsePassive = true ;
    request.EnableSsl = true;我也用了啊,还是不行。我都不知道是怎么回事了。加入我不用ssl是肯定能传的。
    我也把服务器上发的证书在客户端安装了的。哎,怎么回事哦。?哪位大哥能帮我呢。
      

  6.   

    根证书??可是fileZilla:ftp服务器就能生成一个证书啊,那个证书里面用文本文件打开后有两部分内容如下:
    -----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDvxrV1gwIUJKniirvycr2+BHonFgRmrzcRd72xpmSGZ5qrhpC1
    gGq4ZbfCbypNnjY4aWR2DQiW1B4sYdwvnGatWgaRGx4DuuPu+n26j5XW7QijF3Dg
    QY+JYB4WpIDN2Z9tmNRf2kHy+mF6BD1axiJRVaxyiFVS5FtJQ+K7EtzgCQIDAQAB
    AoGAf/BeOIKb5FWf1EJEgNxag/5tk1d7J7NMReTHcfgf4Vt8uxNFOaN4zkVwJK4e
    O2Y09iq+MQNJVvl91B6vVzQz0Dk2i2+l1cLvVL9b1wsEkfN/GrQCocUGbbmpIXCu
    cd/FivGUhBBIow7Fv5JvyMJCO67BpRcgSDqLSveAhAmKeIECQQD5ocqzUA+Gwzef
    d2wwkOx1BWQDEkCn101/m2Xi8ZSMn0wwNx1q+K6bX7rmpEkqkpi9vpZu23E2pjYF
    n3NTEyvZAkEA9eSN5wIapYw9G7mWvs6WtD2A7daEbaPNryIKeTdqGXWQp3eRRgdN
    77XofcLNlS9hUplbdAvCi2m7vzMzLWmnsQJBAPDbI1mpmKF9P/DT6AZf/lXWUq4H
    8Ww/9111EXRLhPm9RWSL+Q1aThZJ4mpg/ttdwJPrDPh/MJf6/MqmEz6Hk9kCQAsM
    rze/R3VC/Qf+6gA/BlSpIt8NMbw/jSGelPvnepQUTWDJJbUQ5PatpPnpxBU9INF2
    ZL6tPJvJL4+i/FzBD7ECQQC6X4ze1SZp6/eCYzCwV/mICo3k2hkeBH2m0rnLqG2q
    EFyCD8ek/Vq647T8HmYLEBiSwgMgABvaBW947E75KsrI
    -----END RSA PRIVATE KEY-----

    -----BEGIN CERTIFICATE-----
    MIICKjCCAZOgAwIBAgIBADANBgkqhkiG9w0BAQUFADBbMQowCAYDVQQDEwExMQsw
    CQYDVQQGEwI4NjEKMAgGA1UECBMBMTEKMAgGA1UEBxMBMTEKMAgGA1UEChMBMTEK
    MAgGA1UECxMBMTEQMA4GCSqGSIb3DQEJARYBMTAeFw0wODA2MjMwOTMyMjJaFw0w
    OTA2MjMwOTMyMjJaMFsxCjAIBgNVBAMTATExCzAJBgNVBAYTAjg2MQowCAYDVQQI
    EwExMQowCAYDVQQHEwExMQowCAYDVQQKEwExMQowCAYDVQQLEwExMRAwDgYJKoZI
    hvcNAQkBFgExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvxrV1gwIUJKni
    irvycr2+BHonFgRmrzcRd72xpmSGZ5qrhpC1gGq4ZbfCbypNnjY4aWR2DQiW1B4s
    YdwvnGatWgaRGx4DuuPu+n26j5XW7QijF3DgQY+JYB4WpIDN2Z9tmNRf2kHy+mF6
    BD1axiJRVaxyiFVS5FtJQ+K7EtzgCQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABlz
    XaudNj3cqrsItG6EW/XKNRa+vvr8ADAGnJjDFHlgiHQT138Y/qi3d6Pr6+ZTs0FT
    bGwAqCznG2fIsphFwOa+oWDhWK1X1p35LRns6xYyvP6afHV/RJidk+dDW8ecC/lg
    66xVC99Vs/ZtHN2nv63quYavlYfJdh10zq9adw6d
    -----END CERTIFICATE-----我就把带红色的那部分PRIVATE KEY删除了然后再客户端装了。就这样的。好像我没看到服务器那里能生成根证书。
      

  7.   

    你服务器上安装证书服务了吗,还有//安全验证回调函数
            private static bool RemoteCertificateCallback(Object sender, X509Certificate certificate,
                                                         X509Chain chain,
                                                         SslPolicyErrors sslPolicyErrors)
            {
                if (sslPolicyErrors == SslPolicyErrors.None)
                    return true;
                MessageBox.Show(sslPolicyErrors.ToString());
                return false;
            }
    这个是了吗,看看到底是什么证书错误
      

  8.   

    你服务器上安装证书服务了吗,还有//安全验证回调函数
            private static bool RemoteCertificateCallback(Object sender, X509Certificate certificate,
                                                         X509Chain chain,
                                                         SslPolicyErrors sslPolicyErrors)
            {
                if (sslPolicyErrors == SslPolicyErrors.None)
                    return true;
                MessageBox.Show(sslPolicyErrors.ToString());
                return false;
            }
    这个试了吗,看看到底是什么证书错误。
    还有你可以看下ie-》internet选项-》内容-》证书-》收信任的更证书颁发机构里面是不是多了一个你自己服务器的根证书
      

  9.   

    奥,我用抓包工具看了。分三种情况:
    1:在没有ssl的情况下,抓包工具能看到传的命令比如用户名,密码什么的。(客户端用的自己的代码)
    2:在有ssl的情况下,客户端用FileZilla客户端,是能正常上传的,并且在抓包工具里能看到目标地址。
    2:在有ssl的情况下,客户端用自己写的代码,是不能正常上传的,并且在抓包工具里能看不到任何目标地址。也就是说可能用自己的代码做ssl的时候,根本就没有向服务器端发过一个包啊。
    为什么哟?,我的客户端用的是msn上的例子。有ssl和没ssl的区别主要就是request.EnableSsl = true?哪位大哥能帮我呢。
      

  10.   

    估计你的IE设置了代理!在代码中加入 限制访问时候使用代理
    listRequest.Proxy = null;