.net下WebMethod属性
Author:zfive5(zhaozidong) Email :zfive5@yahoo.com.cn WebMethod有6个属性: .Description .EnableSession .MessageName .TransactionOption .CacheDuration .BufferResponse 1) Description: 是对webservice方法描述的信息。就像webservice方法的功能注释,可以让调用者看见 的注释。 C#: [WebMethod(Description="Author:ZFive5 Function:Hello World") ] public string HelloWorld() { ??? return "Hello World"; } WSDL: - <portType name="Service1Soap"> - <operation name="HelloWorld"> ? <documentation>Author:ZFive5 Function:Hello World</documentation> ? <input message="s0:HelloWorldSoapIn" /> ? <output message="s0:HelloWorldSoapOut" /> ? </operation> ? </portType> - <portType name="Service1HttpGet"> - <operation name="HelloWorld"> ? <documentation>Author:ZFive5 Function:Hello World</documentation> ? <input message="s0:HelloWorldHttpGetIn" /> ? <output message="s0:HelloWorldHttpGetOut" /> ? </operation> ? </portType> - <portType name="Service1HttpPost"> - <operation name="HelloWorld"> ? <documentation>Author:ZFive5 Function:Hello World</documentation> ? <input message="s0:HelloWorldHttpPostIn" /> ? <output message="s0:HelloWorldHttpPostOut" /> ? </operation> ? </portType> ? 2)EnableSession: 指示webservice否启动session标志,主要通过cookie完成的,默认false。 C#: public static int i=0; [WebMethod(EnableSession=true)] public int? Count() { ?? i=i+1; ?? return i; } 在ie地址栏输入: http://localhost/WebService1/Service1.asmx/Count? 点刷新看看 ...... <?xml version="1.0" encoding="utf-8" ?> ? <int xmlns="http://localhost/WebService1/Service1.asmx/Count? 刷新它,一样吧!要使输出不一样,等30秒。。。 因为代码30秒后才被再次执行,之前返回的结果都是在服务器高速缓存里的内容。 6)BufferResponse 配置WebService方法是否等到响应被完全缓冲完,才发送信息给请求端。普通应用要等完 全被缓冲完才被发送的!看看下面的程序: C#: [WebMethod(BufferResponse=false)] public void HelloWorld1() { ?? int i=0; ?? string s=""; ?? while(i<100) ? { ???? s=s+"i<br>"; ???? this.Context.Response.Write(s); ???? i++; ?? } ?? return; ?} ? ? [WebMethod(BufferResponse=true)] public void HelloWorld2() { ?? int i=0; ?? string s=""; ?? while(i<100) ? { ???? s=s+"i<br>"; ???? this.Context.Response.Write(s); ???? i++; ?? } ?? return; ?} ? 从两个方法在ie里执行的结果就可以看出他们的不同,第一种,是推技术哦! 有什么数据马上返回,而后一种是把信息一起返回给请求端的。 我的例子本身破坏了webservice返回结构,所以又拿出msdn里的例子来,不要 怪哦! [C#] <%@WebService class="Streaming" language="C#"%> using System; using System.IO; using System.Collections; using System.Xml.Serialization; using System.Web.Services; using System.Web.Services.Protocols; public class Streaming { ??? [WebMethod(BufferResponse=false)] ??? public TextFile GetTextFile(string filename) { ??????? return new TextFile(filename); ??? } ??? [WebMethod] ??? public void CreateTextFile(TextFile contents) { ??????? contents.Close(); ??? } } public class TextFile { ??? public string filename; ??? private TextFileReaderWriter readerWriter; ??? public TextFile() { ??? } ??? public TextFile(string filename) { ??????? this.filename = filename; ??? } ??? [XmlArrayItem("line")] ??? public TextFileReaderWriter contents { ??????? get { ??????????? readerWriter = new TextFileReaderWriter(filename); ??????????? return readerWriter; ??????? } ??? } ??? public void Close() { ??????? if (readerWriter != null) readerWriter.Close(); ??? } } public class TextFileReaderWriter : IEnumerable { ??? public string Filename; ??? private StreamWriter writer; ??? public TextFileReaderWriter() { ??? } ??? public TextFileReaderWriter(string filename) { ??????? Filename = filename; ??? } ??? public TextFileEnumerator GetEnumerator() { ??????? StreamReader reader = new StreamReader(Filename); ??????? return new TextFileEnumerator(reader); ??? } ??? IEnumerator IEnumerable.GetEnumerator() { ??????? return GetEnumerator(); ??? } ??? public void Add(string line) { ??????? if (writer == null) ??????????? writer = new StreamWriter(Filename); ??????? writer.WriteLine(line); ??? } ??? public void Close() { ??????? if (writer != null) writer.Close(); ??? } } public class TextFileEnumerator : IEnumerator { ??? private string currentLine; ??? private StreamReader reader; ??? public TextFileEnumerator(StreamReader reader) { ??????? this.reader = reader; ??? } ??? public bool MoveNext() { ??????? currentLine = reader.ReadLine(); ??????? if (currentLine == null) { ??????????? reader.Close(); ??????????? return false; ??????? } ??????? else ??????????? return true; ??? } ??? public void Reset() { ??????? reader.BaseStream.Position = 0; ??? } ??? public string Current { ??????? get { ??????????? return currentLine; ??????? } ??? } ??? object IEnumerator.Current { ??????? get { ??????????? return Current; ??????? } ??? } } ?转至:http://blog.csdn.net/zfive5/archive/2004/12/23/226811.aspx Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=226811 ?(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |