Web services WCFSOAP、WSDL定义了一个整数参数,但服务要求为空。怎么用?

Web services WCFSOAP、WSDL定义了一个整数参数,但服务要求为空。怎么用?,web-services,wcf,soap,wsdl,Web Services,Wcf,Soap,Wsdl,因此,我的任务是与第三方web服务集成。服务的WSDL有一个操作,其中输入参数的定义如下(为匿名性/合法性更改了变量名): 最后,web服务实际上想要接收的消息是 <RequestData> <A>SomeData</A> <B> </B> <C> </C> <D> </D> <E>S

因此,我的任务是与第三方web服务集成。服务的WSDL有一个操作,其中输入参数的定义如下(为匿名性/合法性更改了变量名):

最后,web服务实际上想要接收的消息是

  <RequestData>
         <A>SomeData</A>
         <B> </B>
         <C> </C>
         <D> </D>
         <E>SomeData</E>
      </RequestData>

一些数据
一些数据
所以,在我看来,这是完全无效的,因为B和C被定义为整数,不被定义为可为零,也不被定义为MinOccurs=0

我向拥有服务/wsdl的第三方提出了这个问题,他们的回答基本上是:“没有其他人有问题,处理它,我们建议关闭模式验证”。乔伊

因此,解决问题的步骤如下:

我尝试手动将代理调整为“long?”。产生

     <B xsi:nil="true" xmlns=""/>

Web服务对此感到厌恶

将代理调整为字符串(!)。如果字符串的值为null,则该属性将一起从生成的XML中删除。Web服务对此感到厌恶

将字符串的值设置为“”(空格)。Xml生成为

<B> </B>

网络服务快乐。开发者很伤心

我错过什么了吗?在WSDL导入过程中,我是否可以挥舞一些魔杖来实现这一点?我可以在我的代理上设置一些配置吗?我不认为有,但我想做尽职调查,以确保在我进一步升级之前没有遗漏任何东西

我的解决方法在我看来非常笨拙。它的真正问题是,如果我不能信任合同(其中有许多我必须与之集成),我所有的开发评估都会被抛到脑后。第一次集成应该需要几分钟的时间。导入wsdl。设置属性值。调用方法。取而代之的是2个小时的反复调整代码,在Fiddler中捕获有效负载,并在SoapUI中手动运行测试,以确定发送了什么以及服务实际需要什么

在这个方法的特定用例中,字符串kludge起作用。但是,如果一个需求需要我发送这个参数,现在我有一个属性,我认为它是一个字符串,实际上是一个整数。(我想我可以用第二个整数参数包装字符串字段,但这更麻烦)

最重要的是,第三方在开发过程中一直在更改WSDL(这是本项目的预期),但每次他们添加属性或其他内容时,我都必须重新导入WSDL,这意味着我所有的手动调整都需要重新进行


帮助?

听起来这里的问题是你最初的估计。什么时候集成到第三方服务会像几分钟的工作那么简单?问题似乎是他们自己部署的服务明显不符合他们提供给您的合同这一事实的副作用。因此,您无法可靠地使用合同生成您的消费者代码。您可以做的一件事是向他们索要一个示例客户机,将该客户机的模型引入到您的代码中,然后使用ChannelFactory使用服务,而不必担心服务引用。我的估计比几分钟大得多。我的意思是,我的“快速、肮脏、快乐的路径,测试工作”应该是几分钟。这应该是。同意这应该是-这是SOAP和WSDL的全部目的。听起来这里的问题是您最初的估计。什么时候集成到第三方服务会像几分钟的工作那么简单?问题似乎是他们自己部署的服务明显不符合他们提供给您的合同这一事实的副作用。因此,您无法可靠地使用合同生成您的消费者代码。您可以做的一件事是向他们索要一个示例客户机,将该客户机的模型引入到您的代码中,然后使用ChannelFactory使用服务,而不必担心服务引用。我的估计比几分钟大得多。我的意思是,我的“快速、肮脏、快乐的路径,测试工作”应该是几分钟。这应该是。我同意这应该是——这就是SOAP和WSDL的全部目的。
  <RequestData>
         <A>SomeData</A>
         <B> </B>
         <C> </C>
         <D> </D>
         <E>SomeData</E>
      </RequestData>
     <B xsi:nil="true" xmlns=""/>
<B> </B>