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

Webservice C#构造函数不允许参数?,c#,asp.net,web-services,C#,Asp.net,Web Services,我试图创建一个web服务,该服务在其构造函数中使用一些参数来保存往返,但我一直收到错误: CS1729“servicename”不包含接受“1”参数的构造函数 虽然当我尝试在本地(与服务在同一个项目中)创建即时服务时,一切都很好。。。有什么好处 网络服务: public class ayyash : System.Web.Services.WebService { private string _myname; public ayyash (string myname) {

我试图创建一个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
服务器将发送到服务请求消息

为什么不使用默认构造函数来获取所需的数据?您可以委托给参数化构造函数

public MyWebService : this(xxx) {}
我的意思是,服务主机将始终创建您的类的实例(通过默认构造函数处理请求)。如果您想向其传递参数,您有许多选项:

  • 在默认构造函数中,关闭“查找所需的数据”
  • 在请求中传递数据
  • 可能(我不确定)使用不同的服务实例创建机制
  • 我相信WCF会让你更容易做到这一点。当客户端“实例化”时,你也可以使用。

    您的web服务未调用服务的构造函数。它正在实例化表示您的服务的本地代理对象。由.NET生成的代理对象仅支持默认构造函数。这就是为什么会出现编译器错误的原因

    本地对象工作的原因是您实际上并没有调用web服务,您只是实例化了一个本地对象,然后对其调用了一个方法

    我认为您需要更改方法以将所有必需的数据传递给WebMethod。web服务的典型方法是使用无状态服务,该服务接受执行请求操作所需的所有数据

    例如:

    [WebMethod]
    public string DoSomething(string name, string otherData)
    {
        ayyash yourObject = new ayyash(name);
    
        return yourObject.DoIt(otherData);
    }
    

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

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


    假设每次在代理对象上调用一个方法时,都会创建一个新的服务器端对象,并在销毁该对象之前调用该方法,但它将帮助您设计web服务。

    我尚未测试,但构造函数是否作为WebMethod公开?您不能将构造函数作为webmothodhow公开?我如何将参数传递给默认构造函数?如果您不需要默认构造函数,请修改它以获取所需的参数。否则,请复制它并添加参数。这代码优先的方法不被认为是web服务开发的最佳方法。自己生成WSDL和模式并从中工作可能更好,但速度较慢。我认为您不理解,或者可能我遗漏了一些默认构造函数(默认情况下)不要接受参数,不管我怎么做,客户端都不会调用任何带有参数列表的构造函数…这是关于c#.net web服务的文档吗?@Ayyash。这正是我所说的。现成的服务主机总是使用默认构造函数。如果您希望构造函数有数据,请获取默认构造函数实际上,我的默认构造函数确实会被调用(我使用的是visual studio),但我不能让它过载,这是我面临的问题,但我喜欢你的想法,我确实需要习惯这种“无状态”概念…在服务端调用构造函数来处理请求。他希望调用非默认构造函数。我在本文中阅读了[以下内容:]这里需要注意的是,WSDL 1.1支持重载操作(请参阅下面“参考资料”部分中的链接),但已从WSDL 1.2规范草案中删除。”是的,它确实有帮助,你知道任何文档或文章来解释webservices的状态吗?我在寻找一个答案:为什么私有变量在构造函数中设置时保留值,而在webmethod中设置时不保留值?这种情况听起来很奇怪,但很可能是因为你收到的是池实例而不是新实例很偶然。您在web服务(ASMX或WCF)中的唯一成员变量应该是依赖项(即存储库等)。尝试在web服务成员变量中存储状态只会让您感到痛苦。