使用安全的Web服务

时间:2013-08-15 18:26:09

标签: c#

我是消费Web服务的新手,我必须访问一个运行状态的Web服务。 我获得了app.config文件,证书文件(.cer)和一些一般性说明。

Haven'n之前使用的是Visual Studio 2008 Express,但我有15年编写vb5 / 6代码的经验。

无论如何,我使用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 = “真” 在我的app.config

我做到了,但什么都没发生

1 个答案:

答案 0 :(得分: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。