Ayy*_*ash 5 c# asp.net web-services
我试图创建一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
消费:
ayyash a = new ayyash("my name is ayyash");
Run Code Online (Sandbox Code Playgroud)
输出:
Compiler Error Message: CS1729: 'ayyash' does not contain a constructor that takes '1' arguments
Run Code Online (Sandbox Code Playgroud)
在实例化客户端代理时,不会调用服务器端构造函数.在创建服务器端对象时调用它; 也就是说,如果和何时调用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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13280 次 |
| 最近记录: |