2009-06-15 82 views
8

我有一个ASP.NET Web服务。这个Web服务工作正常。但是,WSDL将一些参数列为可选项(minoccurs = 0),而其他参数则为非可选项。某些可选参数实际上不是可选的,其他标记为非可选参数的参数实际上是可选的。我想解决这个问题,但是我找不到这个信息来自哪里。ASP.NET Web服务中的可选参数

在我看来,所有原始类型(int,boolean等)都是非可选的,所有其他参数都被标记为可选。但是,我找不到可以更改此位置的位置。我想为原始值指定缺省值,如果它们在请求中缺失并指定哪个非原始参数实际上是可选的。我在哪里做这个?

回答

7

我假设当你说ASP.net Web服务时,你正在用ASMX扩展创建Web服务。我认为在这种情况下发生的事情是所有可为空的类型变为可选的,不可空的变为非可选的。

您也许可以手动编辑生成的WSDL文件。但是,如果重新生成wsdl,则必须重做该工作。

我建议你用basicHttpBinding切换到WCF(除了你的服务名称你的客户不应该注意到这个区别)。

使用WCF,你可以简单地标示为必要或没有在合同数据参数:

[DataMember(IsRequired="false")] 
+0

这个答案几乎是完全错误的。您不能使用空值而不是可选参数。由于.net 4.0,你可以在任何方法中使用[可选参数](http://msdn.microsoft.com/zh-cn/library/dd264739.aspx)。 – Bora 2013-02-05 09:17:23

+1

@Bora,答案是从2009年开始,当时这是可用的。 – 2013-02-05 11:20:34

6

的原语不参考类型,而是他们类型。您可以使用类型“空”来实现。

短手

int? i; 

或长的手来

Nullable<int> i;