2010-06-29 30 views
9

Tôi có một số mã tôi muốn thực hiện rất sớm trong vòng đời của một cuộc gọi đến một chức năng ASMX. Đối với các trang ASPX của chúng tôi, mã này nằm trong hàm Page_Init() trên một lớp cơ sở, từ đó tất cả các trang ASPX của chúng tôi kế thừa.ASMX tương đương với Page_Init?

Có ASMX tương đương với chức năng Page_Init() của ASPX không?

Tốt hơn, có biểu đồ vòng đời ASMX giống như biểu đồ ASPX không? http://msdn.microsoft.com/en-us/library/ms178472.aspx

Nếu có ASMX tương đương với Page_Init(), tôi giả sử tôi có thể triển khai mã trong một lớp cơ sở chung, từ đó tất cả các lớp ASMX của tôi có thể kế thừa, đúng không?

EDIT: Phản hồi tuyệt vời - cảm ơn sự giúp đỡ của bạn!

Trả lời

8

Không có điều gì thực sự trong dịch vụ web asmx, System.Web.Services.WebService không có sự kiện nào. Đặt cược tốt nhất của bạn là tạo một hàm tạo mặc định và đặt nó vào đó.

ví dụ:

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class WebService1 : System.Web.Services.WebService 
    { 
     private string strRetVal; 

     public WebService1() 
     { 
      strRetVal = "Hello World"; 
     } 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return strRetVal; 
     } 
    } 
+1

+1 - điểm tốt. Quên rằng các cuộc gọi dịch vụ web là "không quốc tịch", do đó, các nhà xây dựng sẽ được gọi cho mỗi yêu cầu phương pháp web. Đẹp nhất. – RPM1984

4

Câu hỏi rất hay! Không hoàn toàn chắc chắn, nhưng tôi tin rằng việc thực hiện các dịch vụ Web ASMX hơi khác với các trang ASPX - không có "Page Lifecycle" (nghĩa là không có sự khởi tạo các điều khiển để hiển thị HTML - vì phản hồi nói chung là một cách tổng quát). XML).

Tùy chọn duy nhất của bạn sẽ là chọn một trong các sự kiện Ứng dụng trong Global.asax - sự kiện phù hợp duy nhất sẽ là Application_PreRequestHandlerExecute.

Bạn có thể thử Application_BeginRequest, nhưng tôi tin rằng điều này chỉ dành cho các yêu cầu ASP.NET Page, không phải các cuộc gọi dịch vụ web.

Tùy chọn khác (như bạn đã nói) là tạo lớp cơ sở cho dịch vụ web của bạn, sau đó gọi phương thức cơ sở chung trong tất cả các phương pháp web của bạn ở dòng đầu tiên. Bạn sẽ phải lặp lại cuộc gọi này trong TẤT CẢ các phương pháp web của bạn. Hoặc nếu bạn có tất cả các phương thức web của bạn trong một tệp dịch vụ web (ASMX), thì chỉ cần tạo một phương thức tĩnh thông thường (không trang trí nó với thuộc tính WebMethod) và gọi đó.

+0

Tuyến đường Beter so với imho anser được chấp nhận. (đặc biệt nếu bạn cần làm điều gì đó với bối cảnh yêu cầu.) –

0

Họ không có 'vòng đời' tương tự

duy nhất 2 'sự kiện' là các yêu cầu và đáp ứng.