3

新しい通知があるたびにユーザーに通知する通知システムを作成しました。

現在、以下のクライアントサイドスクリプトでは、毎秒Webサービス呼び出しを呼び出して、サーバーに新しい通知をpingしています。代わりに、新しい通知があるたびにAjax対応のWCFをクライアントに通知させるにはどうすればよいですか?

Ajax対応のWCFを使用してオブザーバーデザインパターンを実装するためのリソース、提案、またはチュートリアルを持っている人はいますか?

*注:オブザーバーパターンを使用することは、これを実装するための最良の方法ではない可能性があります。最良のパターン(私の現在の実装である可能性があります)に関するアドバイスをいただければ幸いです。

クライアント側:

$(document).ready(function () {

self.setInterval("getNewNotificationsCount()", 1000);
});

function getNewNotificationsCount() {
$.ajax({
    type: "POST",
    url: site_root + "services/NotificationService.svc/json/GetNewNotificationsCount",
    contentType: "application/json; charset=utf-8",
    data: {},
    dataType: "json",
    error: function (request, error, u) {
        alert('error: ' + error);
    },
    success: function (result, status) {
        $('#hip_badge').text(result.d);
    }

});}

通知サービス

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class NotificationService {

{
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]
    public int GetNewNotificationsCount()
    {
        NotificationManager nm = new NotificationManager();

        return nm.getNewNotifications(GetUserName());
    }
4

3 に答える 3

1

WCFの使用に縛られていますか?SignalRは、この種のプッシュ通知に適している場合があります。

更新:明確にするために。SignalRは、サーバーがデータを多数のクライアントにプッシュするメカニズムを抽象化します。その1つがJavaScriptです。クライアントでは、通知マネージャーによって送信される通知を処理するイベントハンドラーをフックできます...

乾杯、ディーン

于 2012-07-22T19:01:59.440 に答える
0

私のWebモデルの理解では、クライアントが通知を要求しない限り、サーバー(WCFサービス)がクライアント(AJAXアプリケーション)に通知する方法はありません。これは、クライアントとサーバー間の要求/応答システム全体の中核であるように思われます。

アプリケーションをより効率的にするためにこれが必要であることを理解しています。役立つ可能性のあるいくつかの提案があります。

  • HTTPポーリングデュプレックスWCFチャネル-クライアントはクライアントへの変更(通知)をポーリングしているため、これは正確に必要なものを提供しません。しかし、それでも、アプリケーションに必要なものに合わせてカスタマイズされています。
  • ポーリングベースのWCFを使用できず、現在のメカニズムに固執したくない場合は、サービスをからに変更することをお勧めしますPOSTGET通知を取得するときに複雑なデータを送信する必要はありません。Aは、AJAXシナリオのGET場合よりも少し高速です。POST
于 2012-07-22T19:22:27.577 に答える
0

これは、WCF(4.5)の新しいリリースで可能になります。Websocketを使用して、HTTPクライアントとの双方向通信を行うことができます。その場合、AJAXを使用する必要はありませんが、websocketを使用したjavascriptを使用します。詳細については、次のリンクを確認してください:http: //www.codeproject.com/Articles/338789/What-s-new-in-WCF-4-5-WebSocket-support-Part-1-of

于 2012-07-25T09:32:27.743 に答える