![]() |
1
1
是的,可以在wcf中使用可以为空的参数。我认为这里的问题是,QueryStringConverter不适用于可以为空的参数。 怎么办?是否需要使用uritemplate属性?如果将此发布为“经典Web服务”,则不会出现此问题。 另一种选择是遵循您提供的链接中的建议-即接收myx参数作为字符串,然后将其强制转换为int?,其中(说)“n”为空。不漂亮。 |
![]() |
2
34
这个问题有一个解决方案,不需要任何黑客攻击。这可能看起来像很多工作,但它不是真的,如果你通读它会有很多意义。问题的核心是 unresolved bug (从.NET 4开始)这意味着 WebService主机 不使用自定义的QueryStringConverters。因此,您需要做一些额外的工作,并了解WebHTTPendpoints的WCF配置是如何工作的。下面为您列出解决方案。 第一,风俗习惯 查询字符串转换器 它允许在查询字符串中通过省略空值或提供空字符串来提供空值:
现在习惯了 WebHTTP行为 这将设置自定义 查询字符串转换器 代替标准的。注意,这种行为源自 WebHTTP行为 这一点很重要,因此我们继承了REST端点所需的行为:
现在是一种习俗 服务宿主 将自定义行为添加到 WebHtdPoT点 这样它就可以使用 查询字符串转换器 . 在这段代码中需要注意的一点是,它是从 服务宿主 而不是 WebService主机 .这很重要,因为否则上面提到的错误将阻止自定义 查询字符串转换器 使用中:
因为我们不是从 WebService主机 我们需要完成它的工作,并确保我们的配置是正确的,以确保其余的服务可以工作。你所需要的就是这样的东西。在这个配置中,我还有一个WS-HTTP端点设置,因为我需要从C(使用WS-HTTP作为更好的服务)和移动设备(使用REST)访问这个服务。如果您不需要这个端点,可以省略它的配置。需要注意的一件重要事情是,您不再需要自定义端点行为。这是因为我们现在正在添加自己的自定义端点行为,该行为绑定自定义 查询字符串转换器 . 它来源于 WebHTTP行为 这就是配置添加的内容,使得它现在是多余的。
最后要做的是创建一个自定义 服务医院 并告诉svc文件使用它,这将导致使用所有自定义代码。当然,您也可以创建一个允许您在配置中添加行为的自定义元素,但我认为对于这种行为,基于代码的方法更好,因为您不太可能希望删除处理可空类型的能力,因为它会破坏您的服务:
将service.svc文件的标记更改为:
现在,您可以在服务接口中使用可以为空的类型,而无需任何问题,只需省略参数或将其设置为空字符串即可。以下资源可能对您更有帮助:
希望这有帮助! |
![]() |
3
8
实际上……您绝对可以拥有可以为空的参数,或者不受支持的任何其他类型的参数。
|
![]() |
4
1
嗯,快速解决方案(不是漂亮的)是接受可空参数作为wcf各自接口和服务代码中的字符串。 |
![]() |
Dee J. Doena · 比较两个空可空值 8 年前 |
![]() |
Konrad Viltersten · 如何让EF理解某些列不可为空? 9 年前 |
![]() |
Muhammad Nasir · 空对象设计模式与空对象检查 9 年前 |
![]() |
checketts · 从可空对象创建流的惯用方法 9 年前 |