1

我是使用网络服务的新手,我必须访问国营网络服务。我得到了一个 app.config 文件、一个证书文件 (.cer) 和一些一般说明。

以前没有使用过 Visual Studio 2008 Express,但我在编写 vb5/6 代码方面有 15 年的经验。

无论如何,我使用 mmc 安装了 .cer 文件,然后打开了一个新项目并添加了 System.Runtime.Serialization 和 System.ServiceModel 我添加了对 WSDL 链接的服务引用我在项目中包含 app.config 文件并编写了以下代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EchoSvcClientConsAppl
{
    class Program
    {
    static void Main(string[] args)
        {

        ConAp66.myserviceref.ServiceClient clientProxy = new ConAp66.myserviceref.ServiceClient();

        clientProxy.ClientCredentials.UserName.UserName = "xx";
        clientProxy.ClientCredentials.UserName.Password = "xx";

        clientProxy.Open();

        if (clientProxy != null)
            System.Console.WriteLine("init succeeded ");
        else
            System.Console.WriteLine("init error");

        String ar1 = "xxx";
        String ar2 = "xxx";
        String ar3 = "xxx";
        ConAp66.myserviceref.eRes r = clientProxy.getRes1(ar1, ar2, ar3);

        if (r.status != null)
             System.Console.WriteLine("ok");
        else
             System.Console.WriteLine(r.error);

        clientProxy.Close();

        System.Console.ReadLine();
        }
      }
  }

我在线收到错误消息:ConAp66.myserviceref.eRes r = clientProxy.getRes1(ar1, ar2, ar3);

说我有令牌认证问题

任何线索???非常感谢您的帮助,因为我真的不知道该怎么做...

更新:

我将跟踪添加到 app.config 并得到:

安全处理器无法在邮件中找到安全标头。这可能是因为消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。如果为安全配置了服务并且客户端未使用安全性,则可能会发生这种情况。

经过一番谷歌搜索后,我发现应该将 enableUnsecuredResponse="true" 放在我的 app.config 中

我这样做了,但什么也没发生

4

1 回答 1

0

我认为您需要按如下方式接受证书服务器。

public static bool CertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error)
{
     // Says that you accept the certificate.
     // In production environment you have to really check if you  can accept the certificate.  
     return true;
}

ServicePointManager.ServerCertificateValidationCallback = CertHandler;   

在创建代理之前添加这些行。

ServicePointManager类的命名空间是 System.Net。

X509Certificate类的命名空间是 System.Security.Cryptography。

于 2013-08-15T20:46:26.173 回答