Dariusz Bujak

Dariusz Bujak Student, młodszy
programista JAVA,
C++

Temat: WebService błąd serwera 500

Witam,
mam problem z serwisem który przyjmowałby zapytania metodą POST, napisałem takiego klienta:
z linku z MSDN:

WebRequest request = WebRequest.Create("http://localhost:51337/Web_Service/TestWebService.asmx?op=SetTest");
// Set the Method property of the request to POST.
((HttpWebRequest)request).UserAgent = ".NET Framework Example Client";
request.Method = "POST";
// Create POST data and convert it to a byte array.
string postData = "pControlSum=0";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
WebResponse response = request.GetResponse();
// Display the status.
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Console.WriteLine(responseFromServer);
// Clean up the streams.
reader.Close();
dataStream.Close();
response.Close();


a po stronie serwera stworzyłem taki WebService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

/// <summary>
/// Summary description for TestWebService
/// </summary>


[WebService(Namespace = "http://localhost:51337/testWebService")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class TestWebService : System.Web.Services.WebService {

public TestWebService () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

[WebMethod]
public string SetTest(string pControlSum)
{

return "SetTest pControlSum: " + pControlSum;
}

}


Gdy próbuje z klienta połączyć sie do WebServisu dostaje wyjatek:

Serwer zdalny zwrcił błąd: (500) Wewnętrzny błąd serwera. <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="pl">System.Web.Services.Protocols.SoapException: Serwer nie może przetworzyć żądania. ---> System.Xml.XmlException: Dane na poziomie głównym są nieprawidłowe. wiersz 1, pozycja 1.
w System.Xml.XmlTextReaderImpl.Throw(Exception e)
w System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
w System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
w System.Xml.XmlTextReaderImpl.ParseDocumentContent()
w System.Xml.XmlTextReaderImpl.Read()
w System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()
w System.Xml.XmlReader.MoveToContent()
w System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()
w System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()
w System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
w System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
w System.Web.Services.Protocols.SoapServerProtocol.Initialize()
w System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
--- Koniec śladu stosu wyjątków wewnętrznych ---</soap:Text></soap:Reason><soap:Detail /></soap:Fault></soap:Body></soap:Envelope>


Klient będzie działał na Windows Mobile 5.0 dlatego muszę używać metody POST.

Czy może mi ktoś wskazać gdzie mogę mieć błąd, z góry dziękuje za każdą wskazówkę.

Pozdrawiam
Dariusz Bujak

Dariusz Bujak Student, młodszy
programista JAVA,
C++

Temat: WebService błąd serwera 500

Witam,

Tak tylko w kwesti wyjaśnienia dla potomności jak by ktoś gdzieś miał podobny problem, miałem błąd w adresie, próbowałem

WebRequest request = WebRequest.Create("http://localhost:51337/Web_Service/TestWebService.asmx?op=SetTest");


a powinno być:

WebRequest request = WebRequest.Create("http://localhost:51337/Web_Service/TestWebService.asmx/SetTest");


a dokładnie powinno być zamiast
TestWebService.asmx?op=SetTest 

być
TestWebService.asmx/SetTest 


i po krzyku :) Mój błąd nie doczytałem a co więcej jak wpisze sie w przeglądarce link:

http://localhost:51337/Web_Service/TestWebService.asmx?op=SetTest

to po załadowaniu strony ładnie widać jakie metody i jak powinno sie je wywoływać.

Dodatkowo jeszcze na serwerze produkcyjnym nie miałem włączonej obsługi protokołu przez WebServices dlatego należy w pliku conf dodać wpis:

<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>


To tak tylko w celu wyjaśnienia, jak by ktoś miał jakieś opinie, że można coś zrobić lepiej to proszę o wypowiedzi.

Pozdrawiam :)



Wyślij zaproszenie do