Web Method的一些屬性

來源:互聯網
上載者:User
文章目錄
  • 導航
  • 公告
.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:
-
-

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?
點重新整理看看
......

19

20
......
......
通過它實現webservice資料庫訪問的事物處理,做過實驗,可以哦!
3)MessageName:
主要實現方法重載後的重新命名:
C#:
public static int i=0;
[WebMethod(EnableSession=true)]
public int Count()
{
i=i+1;
return i;
}
[WebMethod(EnableSession=true,MessageName="Count1")]
public int Count(int da)
{
i=i+da;
return i;
}
通過count訪問的是第一個方法,而通過count1訪問的是第二個方法!

4)TransactionOption:
指示 XML Web services 方法的事務支援。
這是msdn裡的解釋:
由於 HTTP 協議的無狀態特性,XML Web services 方法只能作為根對象參與事務。
如果 COM 物件與 XML Web services 方法參與相同的事務,並且在元件服務管理工
具中被標記為在事務內運行,XML Web services 方法就可以調用這些 COM 物件。
如果一個 TransactionOption 屬性為 Required 或 RequiresNew 的 XML Web services
方法調用 另一個 TransactionOption 屬性為 Required 或 RequiresNew 的 XML Web services 方法,
每個 XML Web services 方法將參與它們自己的事務,因為XML Web services 方法只能用作事務中的
根對象。
如果異常是從 Web 服務方法引發的或未被該方法捕獲,則自動放棄該事務。如果未發生異常,則自動提
交該事務,除非該方法顯式調用 SetAbort。
禁用
指示 XML Web services 方法不在事務的範圍內運行。當處理請求時,將在沒有事務
的情況下執行 XML Web services 方法。
[WebMethod(TransactionOption= TransactionOption.Disabled)]
NotSupported
指示 XML Web services 方法不在事務的範圍內運行。當處理請求時,將在沒有事務的
情況下執行 XML Web services 方法。
[WebMethod(TransactionOption= TransactionOption.NotSupported)]
Supported (msdn裡寫錯了,這裡改正)
如果有事務,指示 XML Web services 方法在事務範圍內運行。如果沒有事務,將在沒有事務的情況
電腦教程.Net下WebMethod屬性來自www.itwen.comIT WEN電腦教程網

下建立 XML Web services。
[WebMethod(TransactionOption= TransactionOption.Supported)]
必選
指示 XML Web services 方法需要事務。由於 Web 服務方法只能作為根對象參與事務,因
此將為 Web 服務方法建立一個新事務。
[WebMethod(TransactionOption= TransactionOption.Required)]
RequiresNew
指示 XML Web services 方法需要新事務。當處理請求時,將在新事務內建立 XML Web services。
[WebMethod(TransactionOption= TransactionOption.RequiresNew)]
這裡我沒有實踐過,所以只能抄襲msdn,這裡請包涵一下了
C#
<%@ WebService Language="C#" Class="Bank"%>
<%@ assembly name="System.EnterpriseServices" %>
using System;
using System.Web.Services;
using System.EnterpriseServices;
public class Bank : WebService {
[ WebMethod(TransactionOption=TransactionOption.RequiresNew) ]
public void Transfer(long Amount, long AcctNumberTo, long AcctNumberFrom) {
MyCOMObject objBank = new MyCOMObject();
if (objBank.GetBalance(AcctNumberFrom) < Amount )
// Explicitly abort the transaction.
ContextUtil.SetAbort();
else {
// Credit and Debit methods explictly vote within
// the code for their methods whether to commit or
 // abort the transaction.
objBank.Credit(Amount, AcctNumberTo);
objBank.Debit(Amount, AcctNumberFrom);
}
}
}
5)CacheDuration:
Web支援輸出快取,這樣webservice就不需要執行多遍,可以提高訪問效率,
而CacheDuration就是指定緩衝時間的屬性。
C#:
public static int i=0;
[WebMethod(EnableSession=true,CacheDuration=30)]
public int Count()
{
i=i+1;
return i;
}
在ie的地址欄裡輸入:
http://localhost/WebService1/Service1.asmx/Count?
重新整理它,一樣吧!要使輸出不一樣,等30秒。。。
因為代碼30秒後才被再次執行,之前返回的結果都是在伺服器快取裡的內容。

6)BufferResponse
配置WebService方法是否等到響應被完全緩衝完,才發送資訊給請求端。普通應用要等完
全被緩衝完才被發送的!看看下面的程式:
【以下是MSDN的說明】
===========================
如果將 BufferResponse 設定為 true,就會將 XML Web services 方法的響應序列化到記憶體緩衝區中,直到該響應被完全序列化或緩衝區已滿為止。一旦完成對響應的緩衝處理,該響應就通過網路返回到 XML Web services 用戶端。當 BufferResponsefalse 時,對 XML Web services 方法的響應在被序列化的同時被發回用戶端。通常情況下,只有當已知 XML Web services 方法將大量資料返回到用戶端時,才需要將 BufferResponse 設定為 false。對於少量資料,將 BufferResponse 設定為 true 可提高 XML Web services 的效能。

BufferResponsefalse 時,將對 XML Web services 方法禁用 SOAP 延伸模組名。
===========================

C#:
[WebMethod(BufferResponse=false)]
public void HelloWorld1()
{
int i=0;
string s="";
while(i<100)
{
s=s+"i
";
this.Context.Response.Write(s);
i++;
}
return;
}

[WebMethod(BufferResponse=true)]
public void HelloWorld2()

{
int i=0;
string s="";
while(i<100)
{
s=s+"i
";
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;
}
} }

posted on 2007-07-18 10:25 打不死的貓 閱讀(...) 評論(...) 編輯 收藏

重新整理評論重新整理頁面返回頂部

部落格園首頁博問新聞快閃記憶體程式員招聘知識庫導航

  • 首頁
  • 新隨筆
  • 訂閱
  • 管理
公告Powered by:

部落格園

Copyright 打不死的貓

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.