我初学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对象重新负值一下?

解决方案 »

  1.   

    static 的话m_f只需初始化一次,否则你应该在类实例对象中new m_f
      

  2.   

    我的理解是,每次调用WebService,都相当于一个会话,当然会创建相应新的实例...仅供参考..
      

  3.   

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

  4.   

    我的主要矛盾是:Upload1 o = new Upload1();我只创建了一次webservice的对象,m_f既然是member变量,就应该是一个对象里面共用的一个.事实上我这里却不是这样.liujia_0421(SnowLover)可能能够解释得通
    我第一次接触webservice,觉得和原来得有很多不同啊