关于webservice的参数和返回值有关问题!

关于webservice的参数和返回值问题!~
=====服务端=====
namespace WebTest
 {
     /// <summary>
     /// Service1 的摘要说明
    /// </summary>
     [WebService(Namespace = "http://tempuri.org/")]
     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
     [System.ComponentModel.ToolboxItem(false)]
     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]


     public class Person
     {
         public string name;
         public int age;
         public string address;
     }

     public class Service1 : System.Web.Services.WebService
     {
         public Person PP;
         int iii; 

         public Service1()
         {
             PP = new Person();
             iii = -1;
         }
         

         [WebMethod]
         public Person Change(Person tmpperson)
         {
             tmpperson.name = tmpperson.name + "将被改变";
             tmpperson.age = 99;
             tmpperson.address = tmpperson.address"将被改变";
             PP.name = tmpperson.name;
             PP.age = 88;
             PP.address = "333333";
             iii = 1;
             return tmpperson;
         }

         [WebMethod]
         public int Back()
         {
             return iii;
         }
     }
 }

 =====客户端=====
             Person clientperson = new Person();
             clientperson.name = "某人名";
             clientperson.age = 28;
             clientperson.address = "某大学";

             localhost.Service1SoapClient WS = new localhost.Service1SoapClient();
             localhost.Person person1 = new localhost.Person();
             localhost.Person person2 = new localhost.Person();
             person1.name = "某人";
             person1.age = 28;
             person1.address = "某大学";
             person2=WS.Change(person1);


             int j = -1;
             localhost.Person B = new localhost.Person();
             j = WS.Back();



 =======问题=======
1.执行后发现person2确实返回了改变的值,为什么person1没有变?它不是引用类型么?难道只有返回值才经过XML传输?参数是不经过XML返回的?
2.在webservice应用程序中初始化的iii在经过Change函数时确实从-1变成了1,但是为什么经过 WS.Back()传输回数值时发现iii又变回了-1? 
------解决方案--------------------
1:person1已经改变,但是你没返回。
2:int值类型,你调用第二次的时候又走了一边构造
------解决方案--------------------
你把他当成是一个页面就比较好理解了。
请求是一次性的