加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

.net下WebMethod属性

发布时间:2020-12-17 02:47:23 所属栏目:安全 来源:网络整理
导读:Author:zfive5(zhaozidong) Email :zfive5@yahoo.com.cn WebMethod有6个属性: .Description .EnableSession .MessageName .TransactionOption .CacheDuration .BufferResponse 1) Description: 是对webservice方法描述的信息。就像webservice方法的功能注释

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

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读