C# 使用HttpWebRequest动态使用web服务,无需服务引用

C# 使用HttpWebRequest动态使用web服务,无需服务引用,c#,web-services,soap,wsdl,httpwebrequest,C#,Web Services,Soap,Wsdl,Httpwebrequest,我工作的应用程序必须将数据发送到外部系统。系统将有一个web服务(c#或java或php),我需要使用它。因为外部系统和客户端一样多,所以我需要获取WSDL文件、方法名和参数作为用户输入,并将数据发送到外部系统 因此,我尝试使用可用代码动态调用web服务 我测试了一些可用的免费web服务 我从WSDL文件中找到SOAP位置、方法名称和参数,并将其作为输入 以下服务按预期工作 http://soaptest.parasoft.com/calculator.wsdl Location - http:

我工作的应用程序必须将数据发送到外部系统。系统将有一个web服务(c#或java或php),我需要使用它。因为外部系统和客户端一样多,所以我需要获取WSDL文件、方法名和参数作为用户输入,并将数据发送到外部系统

因此,我尝试使用可用代码动态调用web服务

我测试了一些可用的免费web服务

我从WSDL文件中找到SOAP位置、方法名称和参数,并将其作为输入

以下服务按预期工作

http://soaptest.parasoft.com/calculator.wsdl
Location - http://ws1.parasoft.com/glue/calculator
Method Name - add
Parameter - x,y
但当我为另一个免费服务提供SOAP位置和方法名时,它抛出500个内部服务器错误

http://www.predic8.com:8080/crm/CustomerService?wsdl
Location - http://www.predic8.com:8080/crm/CustomerService
Method Name - getAll
通过在soapUI中测试上述wsdl,我确认了这些输入是正确的。在soapUI请求窗口中使用相同的位置

我不知道它为什么会出错。请帮助我理解它

另外,请让我知道是否可以从WSDL文件获取服务位置,并使用
HttpWebRequest
获取响应。我担心,不管用于实现web服务的技术如何,这种调用web服务的方法是否有效

编辑:

问题似乎与SOAP信封有关

因为即使我们忽略xmlns:cal=”http://www.parasoft.com/wsdl/calculator/,它将成功执行

但对于,如果忽略xmlns:ns=”http://predic8.com/wsdl/crm/CRMService/1/,它抛出内部服务器错误

http://www.predic8.com:8080/crm/CustomerService?wsdl
Location - http://www.predic8.com:8080/crm/CustomerService
Method Name - getAll

请在此处分享我是如何通用的

问题似乎在于您使用的请求数据。请求验证失败,错误也失败

如果导入提供的,并验证创建请求,那么问题就很明显了

Person
Customer
下有一个元素
id
,数据必须遵循架构
。/common/1
下定义的特定模式

下面是模式引用,它具有
simpleType
限制

   <xsd:simpleType name="IdentifierType">
      <xsd:annotation>
         <xsd:documentation>Identifier for business objects.</xsd:documentation>
      </xsd:annotation>
      <xsd:restriction base="xsd:string">
         <xsd:pattern value="[A-Z]{2}-\d{5}"/>
      </xsd:restriction>
   </xsd:simpleType>

业务对象的标识符。
因此,
id
值应该类似于
AA-12345
,即两个大写字母,连字符(-),后跟5位数字

按照上述模式更改您的请求,您应该是优秀的


希望这会有帮助。

您能显示导致错误的请求吗?技术混蛋,您是否有机会查看答案,看看是否有帮助?时间已经过去,但此链接可能会帮助某人: