Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET web服务中的可选参数_Asp.net_.net_Web Services_Asmx - Fatal编程技术网

ASP.NET web服务中的可选参数

ASP.NET web服务中的可选参数,asp.net,.net,web-services,asmx,Asp.net,.net,Web Services,Asmx,我有一个ASP.NET web服务。这个web服务工作得很好。但是,WSDL将一些参数列为可选参数(minoccurs=0),而将其他参数列为非可选参数。一些可选参数实际上不是可选的,其他标记为非可选的参数实际上是可选的。我想修复此问题,但找不到此信息的来源位置 在我看来,所有基本类型(int、boolean等)都是非可选的,而所有其他参数都标记为可选的。但是,我找不到一个可以更改此内容的位置。如果请求中缺少原语值,我想为原语值指定默认值,并指定哪个非原语参数实际上是可选的。我在哪里做这件事?我

我有一个ASP.NET web服务。这个web服务工作得很好。但是,WSDL将一些参数列为可选参数(minoccurs=0),而将其他参数列为非可选参数。一些可选参数实际上不是可选的,其他标记为非可选的参数实际上是可选的。我想修复此问题,但找不到此信息的来源位置


在我看来,所有基本类型(int、boolean等)都是非可选的,而所有其他参数都标记为可选的。但是,我找不到一个可以更改此内容的位置。如果请求中缺少原语值,我想为原语值指定默认值,并指定哪个非原语参数实际上是可选的。我在哪里做这件事?

我假设当你说ASP.net web服务时,你是在用ASMX扩展创建web服务。我认为在这种情况下,所有可为null的类型都变成可选的,而不可为null的类型变成非可选的

您也许可以手动编辑生成的WSDL文件。但是,如果重新生成wsdl,您将不得不重做这项工作

我建议您使用basisHttpBinding切换到WCF(除了您服务的名称,您的客户不应该注意到差异)

使用WCF,您可以简单地将数据协定中的参数标记为需要或不需要:

[DataMember(IsRequired="false")]
原语不是引用类型,而是值类型。可以通过几种方式使值类型为“null”

简写是

int? i;
或者在这里举手

Nullable<int> i;
Nullable i;

这个答案几乎完全是错误的。不能使用nullables代替可选参数。由于.NET4.0可以在任何方法中使用。@Bora,答案是从2009年开始的,当时这是可用的。这没有错。只要更新您的答案,一切都会好起来。您如何区分省略参数(并使用默认值)与希望将值设置为NULL?我想如果您想区分这一点,您可能需要迁移到Option/Maybe的功能模式,而不允许NULL。在该范例中,将有一个Null/Empty的显式对象类型。如何让ASMX更改WSDL中的minoccurs,我只是不确定。您可以在这里阅读更多内容:另外,如果您真的希望web服务具有原始的XSD/WSDL契约,您可以首先构建web服务契约: