Webservice C#构造函数不允许参数?
我试图创建一个web服务,该服务在其构造函数中使用一些参数来保存往返,但我一直收到错误: CS1729“servicename”不包含接受“1”参数的构造函数 虽然当我尝试在本地(与服务在同一个项目中)创建即时服务时,一切都很好。。。有什么好处 网络服务: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) {
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) {}
我的意思是,服务主机将始终创建您的类的实例(通过默认构造函数处理请求)。如果您想向其传递参数,您有许多选项:
[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服务成员变量中存储状态只会让您感到痛苦。