微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net下WebMethod属性

Author:zfive5(zhaozidong)

Email :[email protected]

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐