0

目前,我有一个 C# 控制台应用程序,该应用程序通过WebServiceHost网站正在使用这些 Web 服务公开 Web 服务,但现在我正在尝试将 SSE 添加到该站点。

客户端的代码是:

var source = new EventSource(server+'eventSource');
source.onmessage = function (event) {
  alert(event.data);
};  

但是在服务器端,当我尝试定义合同时:

[OperationContract]
[WebGet]
String EventSource();

服务返回的服务是带有字符串的 xml。

我应该在服务器端做什么来创建可用于 SSE 的文档?

提前感谢

4

1 回答 1

2

如果您有 OperationContract,则返回类型始终序列化为 XML 或可选的 JSON。如果您不希望将返回值序列化,请将其定义为 Stream。

[OperationContract] 
[WebGet] 
Stream EventSource(); 

// Implementation Example for returning an unserialized string.
Stream EventSource()
{
   // These 4 lines are optional but can spare you a lot of trouble ;)
   OutgoingWebResponseContext context = WebOperationContext.Current.OutgoingResponse;
   context.Headers.Clear();
   context.Headers.Add("cache-control", "no-cache");
   context.ContentType = "text/event-stream"; // change to whatever content type you want to serve.

   return new System.IO.MemoryStream(Encoding.ASCII.GetBytes("Some String you want to return without the WCF serializer interfering.")); 
}

如果您自己构建流,请记住.Seek(0, SeekOrigin.Begin);在返回之前执行。

编辑: 更改命令顺序以在清除标题后设置 ContentType。否则你也会清除新设置的 ContentType ;)

于 2012-05-26T15:09:21.293 回答