今天可是相当的高产…不玩游戏的一天的我,时间好漫长啊
调用好像是有三种方法,一种直接引用,一种使用代理,还有一种就是使用Webpost方法调用接口(不过应该需要接口那边支持)
方法一
webservice直接引用,挺简单的
步骤
打开vs解决方案–>点击工程文件–>右键添加–>添加服务引用–>选择左下角高级–>点击左下角添加web引用–>然后将需要引用的url(地址)添加上–>点击输入框右边的转到–>修改web引用名–>添加引用
就可以了
使用方法
//实例化引用服务
WebReference.接口文件名 xxx = new WebReference.接口文件名();
//调用其中一个接口 res为返回的数据
var res = xxx.BackupNcFile(参数1, 参数2);
//下一步代码
res...
其中xxx下面有许多方法,其中一个会经常用到的是xxx.Url(),是用来修改调用的接口地址的,写在调用之前,这样就实现了接口Url的可配置,当然接口文件的内容还是需要一样的内容的
方法二
使用代理
步骤
无…
…还没仔细看过,大家可自行百度
方法三
使用webpost方式调用服务
注意1:需要接口那边支持post方法,C#的webservice的接口,方法上应该会有[WebMethod]的注解
注意2:方法返回的xml文件流,需要自己读取xml文件获取数据
内容较多,我就直接贴代码了,此处为soap1.1格式
public string callurl(string url, string methodName, string FileName, string MachineID)
{
try
{
//远程访问webservice接口
//构造完整的请求地址
string completeUrl = string.Format("{0}?op={1}", url, methodName);
//实例http访问对象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(completeUrl);
//将参数数据转为utf-8字节流
byte[] data = getRequestData(methodName, FileName, MachineID);
//请求头 -- 经实测,不需要写host,至少我没写也通了
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
request.ContentLength = data.Length;
string mSoapAction = "http://www.baidu.com/baiduservice/" + methodName;
request.Headers.Add("SOAPAction", mSoapAction);
//发送请求
Stream rStream = request.GetRequestStream();
rStream.Write(data,0,data.Length);
rStream.Close();
//获取接口返回值
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
//返回的是xml文件流
string result = reader.ReadToEnd();
dataStream.Close();
response.Close();
return result;
}
catch (Exception ex)
{
throw ex;
}
}
public byte[] getRequestData(string methodName, string FileName, string MachineID)
{
StringBuilder requestData = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
.Append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">")
.Append("<soap:Body>")
.Append("<").Append(methodName).Append(" xmlns=\"http://www.baidu.com/baiduservice/\">");
if (FileName == "")
{
requestData.Append("<MachineID>").Append(MachineID).Append("</MachineID>");
}
else
{
requestData.Append("<FileName>").Append(FileName).Append("</FileName>");
requestData.Append("<MachineID>").Append(MachineID).Append("</MachineID>");
}
requestData.Append("</").Append(methodName).Append(">")
.Append("</soap:Body>")
.Append("</soap:Envelope>");
string val = requestData.ToString();
byte[] data = Encoding.UTF8.GetBytes(val);
return data;
}
总结,这种方法是在方法一不能用的情况下使用,方法一可以用的话,用这种方法就纯属吃力不讨好了,不说了,都是泪…
补:方法三就是直接照着接口的soap示例直接开怼就行了