C#:我想创建一个简单的SOAP客户端
我需要通过证书或更好的keystrefile(myfile.p12)进行客户端身份验证 我在SoapUI中使用了它,在那里它起了作用。我得到了关于可用请求的信息 如果我尝试向空项目添加服务引用,它总是失败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
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
?添加服务引用时,它会尝试连接并下载有关可用请求的元数据。或者可能有防火墙阻止请求?