[英]Webservice C# constructor does not allow arguments?
我試圖創建一個Web服務,在其構造函數中采取一些參數來保存往返,但我不斷得到錯誤:CS1729“servicename”不包含帶有'1'參數的構造函數
雖然當我嘗試在本地創建一個即時(在與服務相同的項目中)一切正常但是...給出了什么?
網絡服務:
public class ayyash : System.Web.Services.WebService {
private string _myname;
public ayyash (string myname) {
_myname = myname;
//Uncomment the following line if using designed components
//InitializeComponent();
}
}
消費:
ayyash a = new ayyash("my name is ayyash");
輸出:
Compiler Error Message: CS1729: 'ayyash' does not contain a constructor that takes '1' arguments
在實例化客戶端代理時,不會調用服務器端構造函數。 在創建服務器端對象時調用它; 也就是說,如果和何時調用Web服務方法。
同樣值得一提的是,您不能在Web服務上擁有實例成員。 你不能在構造函數中接受“name”並從其他方法中使用它; 您必須將“name”作為參數發送到每個Web服務方法中。 簡而言之,必須通過方法參數或cookie將Web服務“state”傳遞給服務(盡管如果轉移到WCF,使用后者會導致問題)。
想象一下,每次在代理對象上調用方法時,都會創建一個新的服務器端對象,並在銷毀對象之前調用該方法。 這並不嚴格(對象可以合並),但它可以幫助您設計Web服務。
當客戶端“實例化”您的Web服務時,它不會在您的服務上調用構造函數。 它實例化一個代表您的服務的本地代理對象。 .NET生成的代理對象僅支持默認構造函數。 這就是您遇到編譯器錯誤的原因。
本地對象工作的原因是您實際上並未調用Web服務。 您只是實例化一個本地對象,然后在其上調用一個方法。
我認為你需要改變你的方法來傳遞WebMethod所需的所有數據。 Web服務的典型方法是使用無狀態服務,該服務接受執行所請求操作所需的所有數據。
例如:
[WebMethod]
public string DoSomething(string name, string otherData)
{
ayyash yourObject = new ayyash(name);
return yourObject.DoIt(otherData);
}
當服務主機在對服務請求消息的請求中創建實例時,將調用默認構造函數 。
為什么不獲取默認構造函數來獲取它需要的數據? 您可以委托參數化構造函數。
public MyWebService : this(xxx) {}
我的意思是服務主機將始終創建您的類的實例(通過默認構造函數處理請求。如果您想將參數傳遞給它,您有許多選項:
我相信WCF可以讓您更輕松地完成此任務。 您也可以直接使用HTTPListener 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.