调用Web服务失败,HTTP状态为400 Bad Request

时间:2010-08-06 20:01:05

标签: asp.net iis-6 asmx webservices-client

2 个答案:

答案 0 :(得分:0)

尝试执行以下操作: 1.添加一个名为wsZipeee的新服务引用,指向Web服务 2.从呼叫位置(另一个Web应用程序,Winform等):

Dim ws as New wsZipeee.ZipeeeSoapClient()
Dim dsStandardMsg As DataSet 
dsStandardMsg = ws.GetMessageByType(BizConstants.MsgType.Standard)

通过创建新的服务引用,这将处理代理并允许您干净地调用它。我假设您要调用的服务引用,Web服务和方法的名称

答案 1 :(得分:0)

如上所述,主站点使用代理DLL与Web服务进行通信。在Visual Studio中,每个代理项目都有一个Web引用(.wsdl文件等)和生成的app.config文件。在这两个代理项目中的一个中,app.config文件保留了原始设置(当然可以在我的桌面开发机器和我的登台Web服务器上运行):

<applicationSettings>
    <ProxyZipeeeService.My.MySettings>
        <setting name="ProxyZipeeeService_WSZipeee_Zipeee" serializeAs="String">
            <value>http://localhost/ZipeeeWebService/Zipeee.asmx</value>
        </setting>
    </ProxyZipeeeService.My.MySettings>
</applicationSettings>

请注意上面的 localhost 值。

事实证明,当部署到生产服务器时,默认网站的主机标头值和同一IIS计算机上的另一个网站。后来我发现了更多关于这个设置的后果,并开始意识到当主站点试图通过localhost访问Web服务时,它失败了,因为找不到localhost的2个主机头值。因此,回到Vstudio并更改Web引用如下修复了问题:

<applicationSettings>
    <ProxyZipeeeService.My.MySettings>
        <setting name="ProxyZipeeeService_WSZipeee_Zipeee" serializeAs="String">
            <value>http://www.zipeee.com/ZipeeeWebService/Zipeee.asmx</value>
        </setting>
    </ProxyZipeeeService.My.MySettings>
</applicationSettings>