在 Visual Studio 2012 年调用没有服务引用的 SOAP 服务
Calling SOAP Service in Visual Studio 2012 without Service Reference
当我添加服务引用时代理生成有缺陷,所以我必须下拉到使用 XML / 构建肥皂信封等
什么是最好的 class 用于此目的?
目前我正在使用 WebClient class 尝试发送 HTTP 请求,其中包含 soap 信封作为有效负载和 soap 操作 header 等等,但是还有其他 class我不知道吗?例如Class 用于创建肥皂信封包装纸? Class 创建 SoapClient?
private string SendServiceCall(string action, XElement requestData, string url)
{
//load our cert
string response = "";
//MyWebClient : System.Net.WebClient
using (MyWebClient client = new MyWebClient(signingCertificate)) {
client.Headers.Add("SOAPAction", @"http://tempuri.org/HelloWorld");
client.Headers.Add("Content-Type", "text/xml; charset=utf-8");
string payload = @"<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><soap:Body>" + requestData.ToString() + "</soap:Body></soap:Envelope>";
//log request
System.IO.File.AppendAllText("c:/temp/request.xml", payload);
byte[] data = Encoding.UTF8.GetBytes(payload);
//parse response
try {
byte[] result = client.UploadData(url, data);
response = Encoding.Default.GetString(result);
System.IO.File.AppendAllText(@"c:/temp/response.xml", payload);
} catch (Exception ex) {
Log(String.Format("Send Service Call Failed Action: {0} URL: {1} Message: {2}",action,url,ex.Message));
}
}
return "";
}
除了 WCF 之外,没有用于 SOAP 服务的客户端或库。
如果您不想在 VS 中通过服务引用添加 wsdl,那么您应该尝试使用 soap headers 而不是 WebClient 的 HttpWebRequest。
因为 WebClient 比 HttpWebRequest 更高 class 而它更慢。
结果是让服务提供商给我他们的接口 类,因为 WSDL 没有正确生成代理。然后我 运行 通过通道工厂的接口,如下所示:
ChannelFactory<ICourtRecordMDEPort> factory = new ChannelFactory<ICourtRecordMDEPort>("epConfig");
ICourtRecordMDEPort client = factory.CreateChannel();
CreateCaseResponse resp = client.CreateCase(req);
factory.Close();
"epConfig" 是 web/app.config.
中配置端点的名称属性
当我添加服务引用时代理生成有缺陷,所以我必须下拉到使用 XML / 构建肥皂信封等
什么是最好的 class 用于此目的?
目前我正在使用 WebClient class 尝试发送 HTTP 请求,其中包含 soap 信封作为有效负载和 soap 操作 header 等等,但是还有其他 class我不知道吗?例如Class 用于创建肥皂信封包装纸? Class 创建 SoapClient?
private string SendServiceCall(string action, XElement requestData, string url)
{
//load our cert
string response = "";
//MyWebClient : System.Net.WebClient
using (MyWebClient client = new MyWebClient(signingCertificate)) {
client.Headers.Add("SOAPAction", @"http://tempuri.org/HelloWorld");
client.Headers.Add("Content-Type", "text/xml; charset=utf-8");
string payload = @"<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><soap:Body>" + requestData.ToString() + "</soap:Body></soap:Envelope>";
//log request
System.IO.File.AppendAllText("c:/temp/request.xml", payload);
byte[] data = Encoding.UTF8.GetBytes(payload);
//parse response
try {
byte[] result = client.UploadData(url, data);
response = Encoding.Default.GetString(result);
System.IO.File.AppendAllText(@"c:/temp/response.xml", payload);
} catch (Exception ex) {
Log(String.Format("Send Service Call Failed Action: {0} URL: {1} Message: {2}",action,url,ex.Message));
}
}
return "";
}
除了 WCF 之外,没有用于 SOAP 服务的客户端或库。 如果您不想在 VS 中通过服务引用添加 wsdl,那么您应该尝试使用 soap headers 而不是 WebClient 的 HttpWebRequest。 因为 WebClient 比 HttpWebRequest 更高 class 而它更慢。
结果是让服务提供商给我他们的接口 类,因为 WSDL 没有正确生成代理。然后我 运行 通过通道工厂的接口,如下所示:
ChannelFactory<ICourtRecordMDEPort> factory = new ChannelFactory<ICourtRecordMDEPort>("epConfig");
ICourtRecordMDEPort client = factory.CreateChannel();
CreateCaseResponse resp = client.CreateCase(req);
factory.Close();
"epConfig" 是 web/app.config.
中配置端点的名称属性