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

时间:2017-09-29 04:08:46

标签: c# web-services soap wsdl

我已经被这个问题困住了很长一段时间了。我正在尝试根据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,symbol)。所以对我来说,听起来应该是一切。必须有我遗漏或做错的东西,因为我在尝试读取响应时收到内部服务器错误。

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

首先您需要确保您的Web服务正在运行。只有在运行模式下才能访问Web服务。如果它没有运行首先运行它,那么从您的应用程序访问...

答案 2 :(得分:0)

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

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