Hi All,
I've a class on the server
[MessageContract]
public class RemoteFileInfo : IDisposable, INotifyPropertyChanged
{
[MessageHeader(MustUnderstand = true)]
public string _FileName;
[MessageHeader(MustUnderstand = true)]
public string FileName
{
get { return _FileName; }
set { _FileName = value; }
}
[MessageBodyMember(Order = 1)]
public System.IO.Stream _FileByteStream;
[MessageHeader(MustUnderstand = true)]
public System.IO.Stream FileByteStream
{
get { return _FileByteStream; }
set { _FileByteStream = value; }
}
public void Dispose()
{
// close stream when the contract instance is disposed.
// this ensures that stream is closed when file download
// is complete, since download procedure is handled by the client
// and the stream must be closed on server.
if (_FileByteStream!=null)
{
_FileByteStream.Close();
_FileByteStream = null;
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
I communicate with my server via WCF. This class shoud be [MessageContract] because of the streaming - (all of my other classes uses [DataContract] anyway).
My problem is that after I generate the classes with SvcUtil on client side I lost the INotify... interface...I get this:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="RemoteFileInfo", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
public partial class RemoteFileInfo
{
[System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
public System.IO.Stream FileByteStream;
[System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
public string FileName;
[System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
public string _FileName;
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]
public System.IO.Stream _FileByteStream;
public RemoteFileInfo()
{
}
public RemoteFileInfo(
System.IO.Stream FileByteStream,
string FileName,
string _FileName,
System.IO.Stream _FileByteStream)
{
this.FileByteStream = FileByteStream;
this.FileName = FileName;
this._FileName = _FileName;
this._FileByteStream = _FileByteStream;
}
}
Without INotifyPropertyChanged the databinding doesn't work I know but I can add it on client side as I did this way:
public partial class RemoteFileInfo : System.ComponentModel.INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
#endregion
}
But still the databinding doesn't work. Do you have any idea? I can't use the databinding with a [MessageContract] class at all???
Thanks for your answers in advance!