Xml WebService完全实例解析(四)

  接上篇文章,我们先简单说明下绑定函数.首先实例化ServiceA,这个和一般类的实例化并没有不同..接下来用xmlNode1来接受函数的返回值, 接下来是构造xml,并将其转化为dataset,这是通用的方法,如果是刚接触不久的朋友,最好能记下这种方法.

      接下来给出异步调用两个服务的代码

//绑定数据
  public void BindData()
  {
   IAsyncResult ar1;
   IAsyncResult ar2;
   serviceA=new SiteA.Service1();
   serviceB=new SiteB.Service1();
   DataSet ds=new DataSet();
   XmlNode xmlNode1,xmlNode2;
   XmlDataDocument xd=new XmlDataDocument();
   StringBuilder xmlString1,xmlString2;
   //--简单的异步调用
   ar1=serviceA.BeginGetSiteAData(strSearch,null,null);
   ar2=serviceB.BeginGetSiteAData(strSearch,null,null);
   xmlNode1=serviceA.EndGetSiteAData(ar1);
   xmlNode2=serviceB.EndGetSiteAData(ar2);
   //----------
   if(xmlNode1==null&&xmlNode2==null) //--存储过程执行失败
    return;

   xmlString1=new StringBuilder(xmlNode1.OuterXml);
   xmlString2=new StringBuilder(xmlNode2.OuterXml);
   xmlString1=MakeNewXmlString(xmlString1,xmlString2);  //生成新的xml
   if(xmlString1.ToString().Equals("<NewDataSet xmlns=\"\"></NewDataSet>"))
    return ;
   xd.LoadXml(xmlString1.ToString());
   ds.ReadXml(new XmlNodeReader(xd));
   DataGrid1.DataSource=ds.Tables["list"].DefaultView;
   DataGrid1.DataBind();
  }

  //生成新XML
  public StringBuilder MakeNewXmlString(StringBuilder str1,StringBuilder str2)
  {
   str1=str1.Replace("</NewDataSet>","");
   str2=str2.Replace("<NewDataSet xmlns=\"\">","");
   str1.Append(str2.ToString());
   return str1;
  }

    这有两个需要注意的地方,一个是xml构造,还有就是异步调用的实现,请读者,自己理解

    下面讲下通过dll来引用webservice的方法,我只把流程介绍下.

    首先,在ie输入服务的地址,如:http://www.xxx.com/service.asmx

   然后写输入http://www.xxx.com/service.asmx?wsdl

   打开后,另存为xxx.wsdl

   然后用vs的命令提示符来编译:wsdl /namespace:SiteA ServiceA.wsdl

  生成名字空间为sitea的代理类

  最后csc /out:ServiceA.dll /t:library Service1.cs ,其中service1.cs为代理类文件

 最后引用dll就可以了.

posted @ 2010-04-10 13:43  小伙子  Views(339)  Comments(0Edit  收藏  举报