0

現時点では、これらの Web サービスを介して Web サービスを公開する C# コンソール アプリケーションが WebWebServiceHostサイトで使用されていますが、現在は 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 がある場合、戻り値の Type は常に 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 に答える