使用没有服务引用的HttpWebRequest动态使用Web服务
我工作的应用程序必须将数据发送到外部系统。 系统系统将有一个Web服务(c#或java或php),我需要使用它。 由于将有与客户端一样多的外部系统,我需要将WSDL文件,方法名称和参数作为用户输入并将数据发送到外部系统。
所以,我试图使用此处提供的代码动态调用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信封有关。
对于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/,则会引发内部服务器错误。
请分享我在这里如何通用
问题似乎与您正在使用的请求数据有关。 请求validation失败,错误也是如此。
如果您导入提供的wsdl并validation创建请求,则很清楚问题是什么。
在Person
和Customer
下有一个元素id
,数据必须遵循模式../common/1
下定义的某些模式
这是架构引用,它具有simpleType
限制 :
Identifier for business objects.
因此, id
值应该像AA-12345
即两个大写字母,连字符( – ),后跟5位数。
按照上述模式更改您的请求,您应该是好的。
希望这有用。