关于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了。
这里只代表我个人的理解,不足之处不要见笑。