从c#访问Web服务时出现500内部服务器错误

问题描述 投票:0回答:3

这个问题困扰我已经有一段时间了。我正在尝试根据 WSDL 文件中的信息创建 SOAP 请求,以发送到 Web 服务并检索响应。根据我在网上阅读的内容,这应该是一个相当简单的过程,并且所有教程和指南几乎都是相同的。

代码:

string message = @"<?xml version=""1.0"" encoding=""utf-8""?>
            <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                <soap:Body>
                    <GetQuote xmlns=""http://www.webservicex.net/"">       
                        <symbol>BB</symbol>        
                    </GetQuote>  
                </soap:Body>
            </soap:Envelope>";

        HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(@"http://www.webservicex.net/stockquote.asmx");
        webRequest.Headers.Add(@"SOAPAction:http://www.webservicex.net/GetQuote");
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Method = "POST";

        XmlDocument soapEnvelopeXml = new XmlDocument();
        soapEnvelopeXml.LoadXml(message);

        using (Stream stream = webRequest.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }

        using (WebResponse response = webRequest.GetResponse())
        {
            using (StreamReader rd = new StreamReader(response.GetResponseStream()))
            {
                string soapResult = rd.ReadToEnd();
                Console.WriteLine(soapResult);
            }
        }

我一定不清楚这一切是如何工作的,据我了解,http 请求被发送到我们在 WebRequest.Create() 方法中指定的 Web 服务以及一些其他信息,例如 SOAPAction,我猜这是实际的方法我们想要调用?在消息正文中,链接了 xml 命名空间,并且可以通过该命名空间(GetQuote、符号)访问元素。所以对我来说,一切听起来都应该流畅。一定是我遗漏了某些内容或做得不正确,因为当我尝试读取响应时收到内部服务器错误。

我正在尝试从 www.webservicex.com 访问一个非常基本的 Web 服务。下面提供了链接。

服务链接:http://www.webservicex.net/stockquote.asmx

WSDL:http://www.webservicex.net/stockquote.asmx?WSDL

c# web-services soap wsdl
3个回答
0
投票

这可能是由于您的测试数据选择造成的。在一小部分测试中,我发现提交 BB 返回异常响应,但提交 APL (Apple) 正确返回股票报价。看起来 API 设计得不是很好,当收到它不管理的数据请求时就会爆炸?

附带说明,有时它也会返回 APL 的异常响应。看起来他们的 API 可能设计得不是很好。

您可以通过导航到 http://www.webservicex.net/stockquote.asmx?op=GetQuote 自行测试,它为您提供了一个允许测试提交的界面。


0
投票

首先您需要确保您的网络服务是否正在运行。只有当Web服务处于运行模式时,您才可以访问它。如果它没有运行,请先运行它,然后从您的应用程序访问...


0
投票

我尝试了以下方法,它在浏览器上给了我一个有意义的错误,这有助于解决问题:

  • 转到 IE 中的菜单“工具/Internet 选项”。
  • 单击“高级”选项卡,取消选中“显示友好 HTTP 错误消息”选项,然后单击“确定”。
  • 尝试再次访问您的网页。现在您将看到更有意义的错误消息,这将帮助您解决问题
© www.soinside.com 2019 - 2024. All rights reserved.