C#:我想创建一个简单的SOAP客户端

C#:我想创建一个简单的SOAP客户端,c#,authentication,soap,C#,Authentication,Soap,我需要通过证书或更好的keystrefile(myfile.p12)进行客户端身份验证 我在SoapUI中使用了它,在那里它起了作用。我得到了关于可用请求的信息 如果我尝试向空项目添加服务引用,它总是失败 There was an error downloading 'https://MYURL/api?wsdl/$metadata'.The request was aborted: Could not create SSL/TLS secure channel. Metadata contai

我需要通过证书或更好的keystrefile(myfile.p12)进行客户端身份验证

我在SoapUI中使用了它,在那里它起了作用。我得到了关于可用请求的信息

如果我尝试向空项目添加服务引用,它总是失败

There was an error downloading 'https://MYURL/api?wsdl/$metadata'.The request was aborted: Could not create SSL/TLS secure channel. Metadata contains a reference that cannot be resolved: 'https://MYURL/soapWebService/api?wsdl'. Could not establish secure channel for SSL/TLS with authority 'myurl:8443'. The request was aborted: Could not create SSL/TLS secure channel.

我使用了以下代码

        var privCert = new X509Certificate2(@"c:\temp\test.p12", "testpass");

        // privCert.Verify() => FALSE!  WHY???
        if (privCert.Verify())  Console.WriteLine("true");
        else                    Console.WriteLine("false");

                    // create Web Request and set CLient Certificate für the authentication
        HttpWebRequest request = CreateWebRequest();
        request.ClientCertificates.Add(privCert);

        // Create SOAP Message for PING Command
        XmlDocument soapEnvelopeXml = new XmlDocument();
        soapEnvelopeXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>
                                <soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:ws=""http://ws.soap.transfer.services.sedna.ser.com/"">
                                    <soap:Header/>
                                    <soap:Body>
                                        <ws:ping>
                                            <sessionUUID>something</sessionUUID>
                                        </ws:ping>
                                    </soap:Body>
                                </soap:Envelope>");

        using (Stream stream = request.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }


        Console.WriteLine("Credentials of request = " + request);


        // Send Command to Webservice
        try
        {
            using (WebResponse response = request.GetResponse())
            {
                using (StreamReader rd = new StreamReader(response.GetResponseStream()))
                {
                    string soapResult = rd.ReadToEnd();
                    Console.WriteLine(soapResult);
                }
            }
        }
        catch (Exception e)
        {

            Console.WriteLine(e.Message);
        }
        Console.WriteLine("\nTaste!");
        Console.ReadKey();
    }

    static HttpWebRequest CreateWebRequest()
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"https://doxapd01.zit.commerzbank.com:8443/soapWebService");
        webRequest.Headers.Add(@"SOAP:Action");
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        return webRequest;
    }
var privCert=new X509Certificate2(@“c:\temp\test.p12”,“testpass”);
//privCert.Verify()=>FALSE!为什么?
if(privCert.Verify())Console.WriteLine(“true”);
else控制台。WriteLine(“假”);
//创建Web请求并为身份验证设置客户端证书
HttpWebRequest请求=CreateWebRequest();
request.ClientCertificates.Add(privCert);
//为PING命令创建SOAP消息
XmlDocument soapEnvelopeXml=新的XmlDocument();
soapEnvelopeXml.LoadXml(@)
某物
");
使用(Stream=request.GetRequestStream())
{
soapEnvelopeXml.Save(流);
}
Console.WriteLine(“请求的凭据=”+请求);
//向Webservice发送命令
尝试
{
使用(WebResponse=request.GetResponse())
{
使用(StreamReader rd=newstreamreader(response.GetResponseStream())
{
字符串soapResult=rd.ReadToEnd();
控制台写入线(soapResult);
}
}
}
捕获(例外e)
{
控制台写入线(e.Message);
}
Console.WriteLine(“\nTaste!”);
Console.ReadKey();
}
静态HttpWebRequest CreateWebRequest()
{
HttpWebRequest webRequest=(HttpWebRequest)webRequest.Create(@)https://doxapd01.zit.commerzbank.com:8443/soapWebService");
webRequest.Headers.Add(@“SOAP:Action”);
webRequest.ContentType=“text/xml;charset=\”utf-8\”;
webRequest.Accept=“text/xml”;
webRequest.Method=“POST”;
返回webRequest;
}

是否有服务运行在
https://MYURL/api?wsdl/$metadata
?添加服务引用时,它会尝试连接并下载有关可用请求的元数据。或者可能有防火墙阻止请求?