Проблемы с отправкой сообщений между приложениями Silverlight

У кого-нибудь были проблемы со связью между двумя приложениями Silverlight. Когда я пытаюсь отправить сообщение из одного приложения, я получаю сообщение об ошибке «Сообщение не может быть доставлено получателю». Мой код для отправки ниже. Я использую аналогичный код из примеры для реализации Windows Live ID в приложении Silverlight. У меня это работает, когда я работаю локально, но когда я отправляю на сервер, я получаю сообщение об ошибке доставки.

    #region Fields
    private readonly LocalMessageSender sender = new LocalMessageSender("LiveIdAuthentication");
    private int attempts = 0;
    private const int MAX_ATTEMPTS = 10;
    #endregion

    #region Constructors
    public MainPage()
    {
        InitializeComponent();

        this.sender.SendCompleted += new EventHandler<SendCompletedEventArgs>(Sender_SendCompleted);
        this.SendMessage("authenticated");
    }
    #endregion

    #region Event Handlers
    private void Sender_SendCompleted(object sender, SendCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            if (attempts > MAX_ATTEMPTS)
            {
                MessageBox.Show(e.Error.Message);
                CloseWindow();
            }
            else
            {
                SendMessage("authenticated");
            }
        }
        else
        {
            attempts = 0;
            CloseWindow();
        }
    }
    #endregion

    #region Methods
    private void SendMessage(string message)
    {
        attempts++;
        this.sender.SendAsync(message);
    }

    private void CloseWindow()
    {
        HtmlPage.Window.Eval("window.open(\"about:blank\", \"_self\")");
        HtmlPage.Window.Eval("window.close()");
    }
    #endregion

Извините, что забыл приемник. Это в основном из примера Live ID.

        private readonly WindowsLiveIdAuthentication _service;
        private readonly AsyncCallback _asyncCallback;
        private readonly object _asyncState;
        private readonly LocalMessageReceiver _receiver = new LocalMessageReceiver("LiveIdAuthentication");
        private bool _isCompleted;
        private LoadUserResult _result;

        #region Constructors
        public LoginAsyncResult(WindowsLiveIdAuthentication service, AsyncCallback asyncCallback, object asyncState)
        {
            this._service = service;
            this._asyncCallback = asyncCallback;
            this._asyncState = asyncState;
            this._receiver.MessageReceived += this.LocalMessageReceived;
        }
        #endregion

        #region Properties
        public object AsyncState
        {
            get { return this._asyncState; }
        }

        public System.Threading.WaitHandle AsyncWaitHandle
        {
            get { throw new NotImplementedException(); }
        }

        public bool CompletedSynchronously
        {
            get { return false; }
        }

        public bool IsCompleted
        {
            get { return this._isCompleted; }
        }

        public LoadUserResult Result
        {
            get { return this._result; }
        }
        #endregion

        #region Methods
        public void Cancel()
        {
            if (!this._isCompleted)
            {
                this._isCompleted = true;
            }
        }

        public void Complete()
        {
            if (!this._isCompleted)
            {
                this._isCompleted = true;
                this._receiver.Dispose();

                Application.Current.RootVisual.Dispatcher.BeginInvoke(() =>
                {
                    if (this._asyncCallback != null)
                    {
                        this._asyncCallback(this);
                    }
                });
            }
        }
        #endregion

        #region Event Handlers
        public void HandleLoadCallback(IAsyncResult asyncResult)
        {
            this._result = this._service.EndLoadUser(asyncResult);
            if (!this._result.User.Identity.IsAuthenticated && !this._isCompleted && (this != asyncResult.AsyncState))
            {
                this._receiver.Listen();
            }
            else
            {
                this.Complete();
                if (Globals.CurrentUser == null)
                {
                    Globals.CurrentUser = _result.User as User;
                    Globals.SelectedDate = DateTime.Now;
                    (App.Current.RootVisual as MainPage).SetTheme(Globals.CurrentUser.CurrentTheme);
                    HtmlPage.Window.Navigate(new Uri("#UserHome", UriKind.Relative));
                }
            }
        }

        private void LocalMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            this._service.BeginLoadUser(this.HandleLoadCallback, this);
        }
        #endregion

ОБНОВЛЕНИЕ: ОК, я обнаружил, что вызов службы RIA не удался, что привело к отказу от вызова Receiver.Listen(). Таким образом, у отправителя не было получателя для отправки сообщений. Я все еще работаю над неудачным вызовом службы RIA, но это уже другая проблема. Я отмечу это как ответ.


person shannon.stewart    schedule 22.07.2010    source источник


Ответы (1)


Также добавьте код получателя. Это очень важная часть этого. Если приемник, например, не существует, то он потерпит неудачу.

person Gabriel McAdams    schedule 22.07.2010
comment
Как отмечалось выше, приемника не существовало. Спасибо, что дали мне ключ, чтобы пойти вниз по стороне приемника. - person shannon.stewart; 23.07.2010