C# webservice如何接收并处理数据?
就新建个webservice项目,然后写个函数类似如下都行
public void Up(XmlDocument doc)
{
//里面通过解析xml操作你自己的数据库
}
public XmlDocument Down()
{
//查询数据库并生成xml
return new XmlDocument();
}
如果XmlDocument他那边不能接收你就直接改成string类型也行。
顺便说下VS里新建WCF服务项目类型也可以实现类似web service的功能,而且更推荐。
public XmlDocument Down()的意思就是将数据库的字段名全部转换成XML格式,然后返回给对方,对方就根据里面的字段名进行赋值再通过public void Up(XmlDocument doc)这样返回过来吗?
实际上webservice与你平时编程没区别,最大的区别就是要考虑到webservice就是为了跨平台使用的,也就是纯文本类型实际上是最通用的,因此不管参数或者返回值都最好是string,int等基本类型,当然XmlDocument理论上也可以我没试过,你自己多试就知道了。
/// <summary>
/// 同步数据对象。用于从webservice中获取数据后同步
/// </summary>
public class WebServiceClient{
private const string WEBSERVICE_URL = "http://host/axis2/services/BookBeanServer";
public static string LastError = string.Empty;
public WebServiceClient() { }
/// <summary>
/// 处理单本资源。为调用处使用并行处理,此处只处理单本资源。
/// </summary>
/// <param name="metaId"></param>
/// <returns></returns>
public bool Process(string metaId) {
var result = new Book();
try {
result.InitializeFrom(this.GetBookOrignalXmlFromWebService(metaId));
}
catch (XmlException ex) {
LastError = ex.Message;
return false;
}
return this.SynData(result);
}
private string GetBookOrignalXmlFromWebService(string metaId) {
MyWebServiceReference.BookBeanServerPortTypeClient client = new MyWebServiceReference.BookBeanServerPortTypeClient(
new WSHttpBinding(SecurityMode.None),
new EndpointAddress(WEBSERVICE_URL)
);
object obj = client.getBook(new string[] { metaId });
XmlNode[] nodes = (XmlNode[])obj;
return nodes.Length > 0 ? nodes[0].InnerXml : string.Empty;
}
private bool SynData(Book Book) {
//TODO:同步数据
return true;
}
}
WebServiceClient表示单本资源处理类,其职责是调用WebService,将获取的数据同步到数据库。
由于涉及到的数据量比较大,在调用出使用并行处理。.Net framework4.0中,提供了并行处理方案,在并行处理方面,更推荐使用其提供的Parallel类,与ThreadPool相比,减少了线程开销。
调用处代码如下:
Parallel.ForEach<string>(
GetMetaIds(),
metaid => {
WebServiceClient client = new WebServiceClient();
var temp = Task.Factory.StartNew(() => { return client.Process(metaid); });
temp.ContinueWith(tmp => {
//TODO:处理同步处理的结果
Console.WriteLine(tmp.Result ? "ok" : "f");
});
}
);
其中GetMetaIds()函数返回IList<string>数据,存储调用的WebService的参数集合。
在Visual Studio中,在新建的项目中添加web service引用,会自动生成访问代理类。此处为webservice引用创建了MyWebServiceReference的命名空间。
搞清楚要传什么数据,以确定怎么存储数据(几个表?之间的关系?各字段类型长度等)
如果是多个表的话,可以定义多个WebService的方法,也可以定义一个方法,用不同参数区别
定义数据传输的xml格式,你负责解析指定格式的xml,并存储到数据库中。
返回值比较简单,就是成功,或者失败就可以了。
暂时只有一个表,请问下如果返回的是数据库表的类型,WebService是不是会自动将这个类转换成XML的?如果像对方这样要求,说提供XML格式的,是要手动编写XML还是等系统自行处理?因为WebService的接口地方加"?WSDL"就能看到XML的格式,所以我都不知手动设置和机器自行处理有什么分别
wsdl那个是根据soap自动生成的,我们可以不用关注,因为我们不是从基础开始编程,而是用现成的类(组件?)。
这儿说的xml格式只限于你实际要传输的数据,
对应于表中的一行或者多行数据。