Webservice C#构造函数不允许参数?

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)

Ric*_*lay 7

在实例化客户端代理时,不会调用服务器端构造函数.在创建服务器端对象时调用它; 也就是说,如果和何时调用Web服务方法.

同样值得一提的是,您不能在Web服务上拥有实例成员.你不能在构造函数中接受"name"并从其他方法中使用它; 您必须将"name"作为参数发送到每个Web服务方法中.简而言之,必须通过方法参数或cookie将Web服务"state"传递给服务(尽管如果转移到WCF,使用后者会导致问题).

想象一下,每次在代理对象上调用方法时,都会创建一个新的服务器端对象,并在销毁对象之前调用该方法.这并不严格(对象可以合并),但它可以帮助您设计Web服务.


Ran*_*ica 6

当客户端"实例化"您的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)