我正在写一个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ɞ〜|!?“
答案 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);
} }