2016-08-02 15 views
0

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 :)

Antwort

1

Dies liegt daran, das Transfer-Encoding gestückelt wird (https://en.wikipedia.org/wiki/Chunked_transfer_encoding). Die 15 ist in HEX 21 Zeichen in diesem Chunk, mit der 0 als Schlussmarke.

+0

Ah ja, das macht jetzt Sinn, ich werde einfach Funktionalität hinzufügen, um Transfer-Encoding zu behandeln. Danke –

+0

Warum verwenden Sie nicht stattdessen eine Java.net.HttpURLConnection? Es behandelt diese wichtigen Dinge wie Encoder-Modi und Verbindungen für Sie. –

+0

Ja, ich habe das stattdessen benutzt. –