日期:2014-05-20  浏览次数:20845 次

关于webservice的想法,有点不太清楚
我初学webservice遇到了这样一个问题:
webservice中:
private   static   FileStream   m_f;        

[WebMethod(Description= "开始上传 ")]
public   bool   BeginUpLoad(string   FileName,string   path)
{
try
{
m_f   =   new   FileStream(path   +   "\\ "
+   FileName,   FileMode.Create);
return   true;
}
catch(Exception   ex)
{
return   false;
}
}

[WebMethod(Description= "分块上传 ")]
public   string   UpLoadBlock(byte[]   fs,int   Length)
{
try
{

MemoryStream   m   =   new   MemoryStream(fs);
m.WriteTo(m_f);
m.Close();
return   " ";
}
catch(Exception   ex)
{
return   ex.Message;
}
}
主要是那个static,如果我不用static   的话,我调用下面一个函数UpLoadBlock,m_f就会是null,为什么.
client端我是这样写的:
Upload1   o   =   new   Upload1();
o.BeginUpLoad(FileName,@ "D:\ ");
for(int   i=0;i <times;i++)
{
b   =   new   byte[block];
fs.Read(b,0,(int)block);
string   ret   =   o.UpLoadBlock(b,block);

//string   a   =   o.UpLoadBlock(b,block);
}
以下是我自己的认为,应该是错的:是不是每次调用webservice就会把member对象重新负值一下?

------解决方案--------------------
static 的话m_f只需初始化一次,否则你应该在类实例对象中new m_f
------解决方案--------------------
我的理解是,每次调用WebService,都相当于一个会话,当然会创建相应新的实例...

仅供参考..
------解决方案--------------------
用static和不用static的区别就在于 声明的变量或者实例的生存周期不一样。另外的区别就在与类成员的访问上。
用static声明后,他的生存周期和类的一样。不用static,生存周期只是在用到他的时候才存在。不用之后就over了。
这里只代表我个人的理解,不足之处不要见笑。