WebService采用HTTP协议传输数据,采用XML格式封装数据。在.Net Core中推荐使用代理类来调用WebService,方便快捷。
以下内容基于.NET Core SDK V2.1版本,最新版本可能有差异,仅供参考。
引用WS与代理类生成
VS项目 右键 添加 引用服务,输入WS
地址,转跳至对应的服务,点击完成生成代理类。也可以使用命令引用。
dotnet svcutil WebServiceUrl
调用WS接口
public bool UploadHspinfo(string xml)
{
try
{
logger.LogInformation("Updload:WS Init");
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress(UploadConfig.WSUrl);
ServiceReference.DataWebServiceIClient client = new ServiceReference.DataWebServiceIClient(binding, address);
var res = client.saveHspinfoListAsync(xml);
return res.Result.Body.@return;
}
catch (Exception ex)
{
logger.LogInformation("Updload:WS Error");
logger.LogInformation(ex.ToString());
return false;
}
}
附属工具类:T to Xml
WS采用Xml格式传输数据,在调用第三方WS接口时,需要符合对应数据结构。实体对象转Xml需要对格式处理,比如去除头部声明。下面方法可以获得干净的Xml字符串,方便组装。
public static string ModelToXml<T>(T model)
{
MemoryStream stream = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
IndentChars = " ",
NewLineChars = "\r\n",
Encoding = Encoding.UTF8,
OmitXmlDeclaration = true
};
using (XmlWriter xmlWriter = XmlWriter.Create(stream, settings))
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
serializer.Serialize(xmlWriter, model, namespaces);
xmlWriter.Close();
};
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
string str = sr.ReadToEnd();
return str;
}