httpResponse短一个或两个字符

时间:2013-06-15 16:53:10

标签: c# wcf web-services httpresponse

我正在写一个wcf webservice。它主要集中在json和xml上,但我需要在2种情况下返回一个字符串。

我正在设置测试:

 [OperationContract]
 [WebInvoke(Method = "GET",
      ResponseFormat = WebMessageFormat.Json,
      BodyStyle = WebMessageBodyStyle.Bare,
      UriTemplate = "test")]
  string BasicString();

我通过自己发送字符串,绕过标准的json返回来欺骗响应。

   protected string BasicString()
   {
       string text = "ok";
       HttpResponse response = HttpContext.Current.Response;
       //response.AddHeader("Content-Length", "");
       response.ContentType = "text/html";
       //response.BufferOutput = true;
       response.Output.Write(text);
       //response.ContentEncoding = System.Text.Encoding.UTF8;
       response.End();
       return string.Empty;
   }

大多数浏览器的回报都是“OK”。然而,在谷歌浏览器和其他一些人,它需要最后一个字符。它读起来......“O”。我在我的本地IIS上运行它。

如果我将它放在托管的IIS上,则会返回“OK”,有时会出现329编码错误。

我需要在哪里开始寻找它以在所有情况下都返回“OK”?

集管?我已经尝试禁用上面的某些行,或者已经禁用了不同的值。

HTTP嗅探器给了我以下内容: 请求:

  

GET /Service/Test.svc/string HTTP / 1.1主机:localhost连接:   保持活力接受:   text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9, / 的; Q = 0.8   User-Agent:Mozilla / 5.0(Windows NT 6.2)AppleWebKit / 537.36(KHTML,   像Gecko)Chrome / 27.0.1453.110 Safari / 537.36 Accept-Encoding:   gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8

响应:

  

HTTP / 1.1 200 OK Cache-Control:私有Transfer-Encoding:chunked   内容类型:text / html; charset = utf-8内容编码:gzip变化:   Accept-Encoding Server:Microsoft-IIS / 8.0 X-AspNet-Version:4.0.30319   X-Powered-By:ASP.NET日期:太阳,2013年6月16日12:19:00 GMT

     

70   I�%&/m�{J�J��t�� $ @ IG#)* EVE F的@흼{{; N” ?\fdlJɞ〜|!?“

1 个答案:

答案 0 :(得分:1)

卡洛斯的评论引出了答案。

使用IO.stream作为返回类型,而不是字符串。

[ServiceContract] public class RawService {
    [OperationContract, WebGet]
    public System.IO.Stream GetValue()
    {
        string result = "Hello world";
        byte[] resultBytes = Encoding.UTF8.GetBytes(result);
        return new MemoryStream(resultBytes);
    } }