ich einen WCF-Dienst in C# geschrieben haben:WCF-Dienst gibt immer Zufallszahlen im Antworttext
namespace MyServices
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
[WebGet(UriTemplate = "/foo/{param}")]
string foo(string param);
}
}
public class MyService : IMyService
{
public string foo(string param)
{
//Do stuff with param
return "Some processed data";
}
}
Immer, wenn ich konsumieren diesen Dienst es außer der Tatsache, funktioniert gut, dass jede Zeile in der Antwort immer vorangestellt ist durch eine Zahl (manchmal eine Zahl mit einem Zeichen). Und die letzte Zeile ist immer eine 0.
Im Folgenden wird ein Client, der diesen Service in Java geschrieben verbraucht:
public class Main
{
public static void main(String[] args)
{
try
{
Socket soc = new Socket(InetAddress.getByName("<SOME IP ADDRESS>"), 80);
PrintWriter out = new PrintWriter(soc.getOutputStream());
String headers = "GET /MyService.svc/foo/some_data HTTP/1.1\r\n"
+ "Host: <SOME HOST>\r\n"
+ "Content-Type: text/plain;charset=utf-8\r\n"
+ "Content-Length: 0\r\n\r\n";
out.print(headers);
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
String response;
while((response = in.readLine())!=null)
{
//Do something with the response
System.out.println(response);
}
out.close();
soc.close();
catch (UnknownHostException e)
{
System.err.println(e.getMessage());
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Dies würde die Ausgabe wie folgt vor:
HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: text/plain;charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=2e5dd814a4cb78f8a5825d56c5879cd18fa384d20597b10f3c685ffe2cff1f53;Path=/;Domain=<SOME DOMAIN NAME>
Date: Tue, 02 Aug 2016 22:53:25 GMT
15
"Some processed data"
0
Zuerst dachte ich, das Zahlen stellten die Anzahl der Zeichen in der folgenden Zeile dar und die 0 gab das Ende des Nachrichtentextes an, scheint jedoch nicht der Fall zu sein.
Jede Hilfe ist willkommen, Danke :)
Ah ja, das macht jetzt Sinn, ich werde einfach Funktionalität hinzufügen, um Transfer-Encoding zu behandeln. Danke –
Warum verwenden Sie nicht stattdessen eine Java.net.HttpURLConnection? Es behandelt diese wichtigen Dinge wie Encoder-Modi und Verbindungen für Sie. –
Ja, ich habe das stattdessen benutzt. –