使用没有服务引用的HttpWebRequest动态使用Web服务

时间:2016-11-03 05:14:17

标签: c# web-services soap wsdl httpwebrequest

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

因此,我尝试使用可用的代码here

动态调用Web服务

我测试了一些免费的网络服务here

我从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信封有关。

对于http://soaptest.parasoft.com/calculator.wsdl,即使我们忽略xmlns:cal =“http://www.parasoft.com/wsdl/calculator/,它也会成功执行。

但对于http://www.predic8.com:8080/crm/CustomerService?wsdl,如果我忽略xmlns:ns =“http://predic8.com/wsdl/crm/CRMService/1/,则会引发内部服务器错误。

请分享我在这里的通用方式

1 个答案:

答案 0 :(得分:0)

问题似乎与您正在使用的请求数据有关。请求验证失败,错误也是如此。

如果您导入提供的wsdl并验证创建请求,则很清楚问题是什么。

idPerson下有一个元素Customer,数据必须遵循模式../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位数。

按照上述模式更改您的请求,您应该很好。

希望这有用。