2010-07-22 5 views
0

У кого-нибудь возникли проблемы, связанные между двумя приложениями Silverlight. Когда я пытаюсь отправить сообщение из одного приложения, я получаю сообщение об ошибке: «Сообщение не может быть доставлено получателю». Мой код для отправки ниже. Я использую аналогичный код, который находится в samples для реализации Windows Live ID в приложении Silverlight. У меня это работает, когда я работаю локально, но когда я отправляю сообщение на сервер, я получаю сообщение об ошибке доставки.Проблемы с отправкой сообщений между приложениями 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 

UPDATE: ОК, я обнаружил, что вызов службы RIA не удалось, в результате чего не вызывая receiver.Listen(). Таким образом, отправитель не отправлял сообщения для отправки сообщений. Я все еще работаю над неудачным вызовом службы RIA, но это другая проблема. Я отмечу это как ответ.

ответ

0

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

+0

Как указано выше, приемник не существует. Спасибо, что дал мне подсказку пойти по приемной стороне. –