H
Hardy Wang
Hi all,
I am new to WSE 3.0, and currently reading the document shipped with
installation. From sample provided (see below), I created WSE service side
code, but how can I consume stream returned by web method in my Web Form
application? I already configurated web.config of my web service by running
WSE 3.0 setting tool.
Thanks!
[WebMethod(BufferResponse = false)]
public GetFileResponseWrapper GetStream () {
String filePath = @"e:\temp\70ONEEL06COMP.pdf";
return new GetFileResponseWrapper(filePath);
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.CodeDom.Compiler;
/// <summary>
/// Summary description for GetFileResponseWrapper
/// </summary>
[XmlSchemaProvider("GetMySchema")]
public class GetFileResponseWrapper : IXmlSerializable, IDisposable {
private string _fileName;
private TempFileCollection tfc = null;
public string FileName { get { return _fileName; } }
public GetFileResponseWrapper ()
: this(null) {
}
public GetFileResponseWrapper (string fileName) {
_fileName = fileName;
// Manages the temp file that contains the file contents
// Dispose this wrapper to clean up temp files.
TempFileCollection tfc = new TempFileCollection();
}
#region Dispose logic
~GetFileResponseWrapper () {
Dispose(false);
}
public void Dispose () {
Dispose(true);
}
void Dispose (bool isDisposing) {
if (isDisposing && tfc != null)
tfc.Delete();
tfc = null;
}
#endregion
/// <summary>
/// The schema for the file contents node is actually just
/// base 64 binary data so return the qname of the schema
/// type directly.
/// </summary>
public static XmlQualifiedName GetMySchema (XmlSchemaSet xss) {
return new XmlQualifiedName("Base64Binary",
"http://www.w3.org/2001/XMLSchema");
}
/// <summary>
/// Always return null.
/// </summary>
public XmlSchema GetSchema () { return null; }
/// <summary>
/// Deserializes state out of an XmlReader
/// </summary>
public void ReadXml (XmlReader r) {
// Read the open tag of the encapsulating element
r.ReadStartElement();
//
// Read the binary data that represents the file contents
// into a temp file.
//
_fileName = tfc.AddExtension("fileContents", false);
ReadContentsIntoFile(r, _fileName);
// Read the close tag of the encapsulating element
r.ReadEndElement();
}
/// <summary>
/// Serializes state into an XmlWriter
/// </summary>
public void WriteXml (XmlWriter w) {
using (FileStream fs = new FileStream(_fileName, FileMode.Open)) {
byte[] buf = new byte[1024];
int numRead = 0;
while ((numRead = fs.Read(buf, 0, 1024)) > 0) {
w.WriteBase64(buf, 0, numRead);
}
}
}
void ReadContentsIntoFile (XmlReader r, string fileName) {
using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
{
if (r.CanReadBinaryContent) {
byte[] buf = new byte[1024];
int numRead = 0;
while ((numRead = r.ReadContentAsBase64(buf, 0, 1024)) > 0)
{
fs.Write(buf, 0, numRead);
}
} else {
throw new NotSupportedException();
}
}
}
}
I am new to WSE 3.0, and currently reading the document shipped with
installation. From sample provided (see below), I created WSE service side
code, but how can I consume stream returned by web method in my Web Form
application? I already configurated web.config of my web service by running
WSE 3.0 setting tool.
Thanks!
[WebMethod(BufferResponse = false)]
public GetFileResponseWrapper GetStream () {
String filePath = @"e:\temp\70ONEEL06COMP.pdf";
return new GetFileResponseWrapper(filePath);
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.CodeDom.Compiler;
/// <summary>
/// Summary description for GetFileResponseWrapper
/// </summary>
[XmlSchemaProvider("GetMySchema")]
public class GetFileResponseWrapper : IXmlSerializable, IDisposable {
private string _fileName;
private TempFileCollection tfc = null;
public string FileName { get { return _fileName; } }
public GetFileResponseWrapper ()
: this(null) {
}
public GetFileResponseWrapper (string fileName) {
_fileName = fileName;
// Manages the temp file that contains the file contents
// Dispose this wrapper to clean up temp files.
TempFileCollection tfc = new TempFileCollection();
}
#region Dispose logic
~GetFileResponseWrapper () {
Dispose(false);
}
public void Dispose () {
Dispose(true);
}
void Dispose (bool isDisposing) {
if (isDisposing && tfc != null)
tfc.Delete();
tfc = null;
}
#endregion
/// <summary>
/// The schema for the file contents node is actually just
/// base 64 binary data so return the qname of the schema
/// type directly.
/// </summary>
public static XmlQualifiedName GetMySchema (XmlSchemaSet xss) {
return new XmlQualifiedName("Base64Binary",
"http://www.w3.org/2001/XMLSchema");
}
/// <summary>
/// Always return null.
/// </summary>
public XmlSchema GetSchema () { return null; }
/// <summary>
/// Deserializes state out of an XmlReader
/// </summary>
public void ReadXml (XmlReader r) {
// Read the open tag of the encapsulating element
r.ReadStartElement();
//
// Read the binary data that represents the file contents
// into a temp file.
//
_fileName = tfc.AddExtension("fileContents", false);
ReadContentsIntoFile(r, _fileName);
// Read the close tag of the encapsulating element
r.ReadEndElement();
}
/// <summary>
/// Serializes state into an XmlWriter
/// </summary>
public void WriteXml (XmlWriter w) {
using (FileStream fs = new FileStream(_fileName, FileMode.Open)) {
byte[] buf = new byte[1024];
int numRead = 0;
while ((numRead = fs.Read(buf, 0, 1024)) > 0) {
w.WriteBase64(buf, 0, numRead);
}
}
}
void ReadContentsIntoFile (XmlReader r, string fileName) {
using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
{
if (r.CanReadBinaryContent) {
byte[] buf = new byte[1024];
int numRead = 0;
while ((numRead = r.ReadContentAsBase64(buf, 0, 1024)) > 0)
{
fs.Write(buf, 0, numRead);
}
} else {
throw new NotSupportedException();
}
}
}
}