2009-01-27 41 views
0

我试图用ASP构建一个web服务,它将被赋予三个参数:一个字符串,一个日期/时间和另一个字符串。制作方法后,WSDL包含此:没有复杂类型的ASP.NET WebService

<s:element name="TimesheetAudit"> 
<s:complexType> 
<s:sequence> 
<s:element minOccurs="0" maxOccurs="1" name="employeeNumber" type="s:string"/> 
<s:element minOccurs="1" maxOccurs="1" name="periodEndDate" type="s:dateTime"/> 
<s:element minOccurs="0" maxOccurs="1" name="timesheet" type="s:string"/> 
</s:sequence> 
</s:complexType> 
</s:element>

黑盒呼叫我的web服务的抱怨存在的参数的数量不匹配。我假设这是因为我的webmethod技术上采取1参数,复杂类型,而不是3。

这是问题吗?如果是这样,我能做些什么来克服它?

编辑:在这种情况下,消费者是黑匣子,我必须建模我的web服务以匹配调用者。 添加

[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
我的方法签名提供了以下错误:
' does not conform to WS-I Basic Profile v1.1. Please examine each of the normative statement violations below. To turn off conformance check set the ConformanceClaims property on corresponding WebServiceBinding attribute to WsiClaims.None. 
R2204: A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute. 
    - Part 'input' of message 'TimesheetAuditSoapIn' from service description with targetNamespace=' http://www.netdes.com/ '. 
    - Part 'TimesheetAuditResult' of message 'TimesheetAuditSoapOut' from service description with targetNamespace=' http://www.netdes.com/ '. 

+0

您在测试容器中有任何问题? – Perpetualcoder 2009-01-27 22:29:48

回答

1

这是很难确定没有关于究竟是什么客户期待的更多信息,但它可能是一个参数样式的问题。

默认情况下,ASP.NET Web服务使用“Wrapped”参数样式,这意味着所有参数都包装在SOAP主体内发送的单个元素中。

您可以将方法声明更改为使用“Bare”参数样式,该参数样式将所有参数直接放入SOAP主体中,而不使用包装器元素。这是通过Web方法上SoapDocumentMethodAttribute的ParameterStyle属性实现的。

查看this MSDN entry了解详情。


针对一致性误差:您可以禁用WS-I一致性通过将检查你的web.config以下:

<configuration> 
    <system.web> 
    <webServices> 
     <conformanceWarnings> 
     <remove name='BasicProfile1_1'/> 
     </conformanceWarnings> 
    </webServices> 
    </system.web> 
</configuration> 

一致性通常是一件好事,但它不是必需的。由于在这种情况下你不能控制定义,所以你没有太多的选择。

客户端也可能期望RPC风格的Web服务而不是文档风格的Web服务。 (这可以通过SoapRpcMethodAttribute而不是SoapDocumentMethodAttribute来控制。)如果在关闭一致性警告后仍然没有运气,您可以尝试更改为RPC样式并查看是否有效。

如果有什么办法可以为客户端获得一个定义(源代码或更好的WSDL用于生成源代码),这样您就可以知道它的期望值是什么,这会有所帮助。如果你能得到一个WSDL,你可以让.NET以正确的格式为你生成Web服务方法。

0

这听起来像你是建立Web服务主机的人,所以你可以运行该节目,对吧?

如果您可以启动Visual Studio,请单击文件,新建网站,为其添加Web服务,使用自动生成的WSDL并成功连接到测试工具,然后该Web服务的使用者应该是能够读取相同的WSDL并与您连接。重要的是你有一个测试工具。

如果是这种情况,那么黑匣子的问题在于它们的末端,而不是你的。