从gsoap调用时,为什么我在调用IIS 7.5中运行的Web服务时遇到HTTP 400错误?

时间:2011-08-29 20:39:44

标签: .net web-services soap iis-7.5 gsoap

我正在尝试调用在IIS 7.5内的Windows 7计算机上运行的Web服务。我可以使用soapUI和来自另一台机器的Java客户端从本地机器调用Web服务,它可以工作。当我尝试使用C程序中的gsoap框架从远程计算机调用Web服务时,我收到HTTP 400:错误请求。我的请求/回复如下,有什么想法吗?

POST /MyService/AddressService.asmx HTTP/1.1
Host: thisMachine.myDomain.net
User-Agent: gSOAP/2.7
Content-Type: text/xml; charset=utf-8
Content-Length: 714
Connection: close
SOAPAction: "http://thisMachine.myDomain.net/MyService/AddressService.asmx/CheckAddress"
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
    <AddressService1:CheckAddress>
        <AddressService1:chkAddress>
            <AddressService1:chkCompanyName>Test</AddressService1:chkCompanyName>
            <AddressService1:chkStreet1>123 Some Rd</AddressService1:chkStreet1>
            <AddressService1:chkStreet2></AddressService1:chkStreet2>
            <AddressService1:chkCity>Columbia</AddressService1:chkCity>
            <AddressService1:chkState>SC</AddressService1:chkState>
            <AddressService1:chkZipcode5>29054</AddressService1:chkZipcode5>
            <AddressService1:chkZipcode4></AddressService1:chkZipcode4>
            <AddressService1:chkSuite></AddressService1:chkSuite>
        </AddressService1:chkAddress>
    </AddressService1:CheckAddress>
</SOAP-ENV:Body>

HTTP/1.1 400 Bad Request
Cache-Control: private
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 29 Aug 2011 19:46:55 GMT
Connection: close
Content-Length: 0

1 个答案:

答案 0 :(得分:0)

我忘了提到我在OpenVms上运行GSOAP。事实证明这很重要,因为gSoap被移植到OpenVms,并且看起来端口中可能存在错误。似乎正在进行的是我在WSDL2H中使用了-n选项并指定了一个名称空间,用于生成gsoap客户端源文件。生成的.nsmap文件中的命名空间数组将我的命名空间附加到数组的名称,这会在引用数组时导致问题(一旦我更改了make(命令过程)以显示警告,这在编译时显示为警告) ;由于无法引用该数组,因此遗留在SOAP文档中的名称空间对于.Net Web服务是不可接受的,并导致HTTP 400 - 错误请求错误。为了解决这个问题,我将命名空间数组的名称更改为“命名空间”,它修复了SOAP文档的生成方式。