Introduction
This is very simple and basic SilverLight-WCF chat application that uses basicHttpBinding and a timer to call the
WCF service in order to refresh the SilverLight client each certain amount of time.
Technique
The solution consists of:
- ASP.NET Web Project
- ASP.NET page to host the SilverLight application
- WCF Service which contains two generic lists to hold online chatters and messages history
- SilverLight Project (Client)
SilverLight client calls the Join()
method and starts the timer, the timer ticks every two seconds
and calls GetChatters()
and GetMessages()
methods, client now is free to call Say()
method to send message to other clients or call Leave()
method to disconnect
from the service and stop the timer.
WCF service responds to client calls to add or remove Client
or Message
from
the generic lists, or send these lists back to the client.
The Code
WCF Service
This is the service contract
[ServiceContract]
public interface IbasicChatService
{
[OperationContract(IsOneWay = false)]
bool Join(Chatter _chatter);
[OperationContract(IsOneWay = true)]
void Say(Message _msg);
[OperationContract(IsOneWay = false)]
List< Chatter> GetChatters();
[OperationContract(IsOneWay = false)]
List< Message> GetMessages();
[OperationContract(IsOneWay = true)]
void Leave(Chatter _chatter);
}
This is the client and message data contracts
[DataContract]
public class Chatter
{
private string _name;
private DateTime _time;
[DataMember]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember]
public DateTime Time
{
get { return _time; }
set { _time = value; }
}
}
[DataContract]
public class Message
{
private string _sender;
private string _content;
private DateTime _time;
[DataMember]
public string Sender
{
get { return _sender; }
set { _sender = value; }
}
[DataMember]
public string Content
{
get { return _content; }
set { _content = value; }
}
[DataMember]
public DateTime Time
{
get { return _time; }
set { _time = value; }
}
}
This is the service implementation
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
ConcurrencyMode=ConcurrencyMode.Multiple)]
public class basicChatService : IbasicChatService
{
private List< Chatter> chatters = new List< Chatter>();
private List< Message> messages = new List< Message>();
private object syncObj = new object();
#region IbasicChatService Members
public bool Join(Chatter _chatter)
{
foreach (Chatter chtr in this.chatters)
{
if (chtr.Name == _chatter.Name)
{
return false;
}
}
lock (syncObj)
{
this.chatters.Add(_chatter);
Message msg = new Message();
msg.Sender = "Service";
msg.Content = "---- " + _chatter.Name + " joined chat ----";
msg.Time = DateTime.Now;
this.messages.Add(msg);
}
return true;
}
public void Say(Message _msg)
{
lock (syncObj)
{
this.messages.Add(_msg);
}
}
public List< Chatter> GetChatters()
{
return this.chatters;
}
public List< Message> GetMessages()
{
return this.messages;
}
public void Leave(Chatter _chatter)
{
foreach (Chatter chtr in this.chatters)
{
if (chtr.Name == _chatter.Name)
{
this.chatters.Remove(chtr);
if (this.chatters.Count < 1)
{
this.messages.Clear();
return;
}
Message msg = new Message();
msg.Sender = "Server";
msg.Content = "---- " + _chatter.Name + " leftt chat ----";
msg.Time = DateTime.Now;
this.messages.Add(msg);
return;
}
}
}
#endregion
}
To integrate SilverLight application with WCF service you have to use basicHttpBinding as followed in the
service configuarion file
< system.serviceModel>
< serviceHostingEnvironment aspNetCompatibilityEnabled="true">
< /serviceHostingEnvironment>
< services>
< service behaviorConfiguration="SilverlightApp_Host.basicChatServiceBehavior"
name="SilverlightApp_Host.basicChatService">
< host>
< baseAddresses>
< add baseAddress="http://localhost:6464/localsystem"/>
< /baseAddresses>
< /host>
< endpoint address=""
binding="basicHttpBinding"
contract="SilverlightApp_Host.IbasicChatService">
< identity>
< dns value="localhost"/>
< /identity>
< /endpoint>
< endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
< /service>
< /services>
< behaviors>
< serviceBehaviors>
< behavior name="SilverlightApp_Host.basicChatServiceBehavior">
< serviceMetadata httpGetEnabled="true"/>
< serviceDebug includeExceptionDetailInFaults="true"/>
< /behavior>
< /serviceBehaviors>
< /behaviors>
< bindings>
< basicHttpBinding>
< binding name="basicBinding"
closeTimeout="00:00:20"
maxBufferPoolSize="1048576"
maxBufferSize="1048576"
maxReceivedMessageSize="1048576"
openTimeout="00:00:20"
receiveTimeout="01:00:00"
sendTimeout="00:01:00"
transferMode="Buffered">
< readerQuotas maxArrayLength="1048576" maxBytesPerRead="1048576"
maxStringContentLength="1048576"/>
< security mode="None">
< transport clientCredentialType="Windows"/>
< /security>
< /binding>
< /basicHttpBinding>
< /bindings>
< /system.serviceModel>
SilverLight Client
I'm a very bad designer so I'll let you imagine any design for this application which of course will be better than
this, this is just two list boxes to hold the online chatters and messages history coming from the service, other
controls are three buttons to join, leave the chat or send a message, and two textboxes for chatter name, and message.
This is the application xaml code
< UserControl x:Class="SilverlightApp.Page"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
< Grid x:Name="LayoutRoot" >
< Grid.Background>
< LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
< GradientStop Color="Black" Offset="0"/>
< GradientStop Color="LavenderBlush" Offset="1"/>
< /LinearGradientBrush>
< /Grid.Background>
< Grid.RowDefinitions>
< RowDefinition Height="50"/>
< RowDefinition Height="25"/>
< RowDefinition Height="25"/>
< RowDefinition Height="200"/>
< RowDefinition Height="30"/>
< RowDefinition Height="50"/>
< /Grid.RowDefinitions>
< Grid.ColumnDefinitions>
< ColumnDefinition Width="70"/>
< ColumnDefinition Width="360"/>
< ColumnDefinition Width="120"/>
< ColumnDefinition Width="70"/>
< /Grid.ColumnDefinitions>
< TextBlock x:Name="labelStatus"
Margin="8, 5, 2, 2"
Grid.Row="1"
Grid.Column="2"
FontFamily="Consolas"
FontSize="13"
Foreground="White">Offline< /TextBlock>
< Grid x:Name="layoutLogin" Grid.Row="2" Grid.Column="1">
< Grid.RowDefinitions>
< RowDefinition Height="25" />
< /Grid.RowDefinitions>
< Grid.ColumnDefinitions>
< ColumnDefinition Width="80"/>
< ColumnDefinition Width="160"/>
< ColumnDefinition Width="*"/>
< /Grid.ColumnDefinitions>
< TextBlock FontFamily="Consolas"
Margin="4, 2, 2, 0"
Grid.Row="0"
Grid.Column="0"
FontSize="12"
Foreground="White">User Name:< /TextBlock>
< TextBox x:Name="textboxName"
Margin="2, 2, 2, 2"
Grid.Row="0"
Grid.Column="1">< /TextBox>
< Button x:Name="buttonJoin"
Background="Transparent"
Margin="2, 2, 2, 2"
Grid.Row="0"
Grid.Column="2"
Click="buttonJoin_Click"
Content="Join">< /Button>
< /Grid>
< Button x:Name="buttonLeave"
Background="Transparent"
Margin="2, 2, 2, 2"
Click="buttonLeave_Click"
Grid.Row="2"
Grid.Column="2"
Content="Leave">< /Button>
< ListBox x:Name="listBoxMsgs"
LayoutUpdated="listBoxMsgs_LayoutUpdated"
Margin="2, 2, 2, 2"
Grid.Row="3"
Grid.Column="1">< /ListBox>
< ListBox x:Name="listBoxNames"
Margin="2, 2, 2, 2"
Grid.Row="3"
Grid.Column="2">< /ListBox>
< TextBox x:Name="textboxMsg"
Margin="2, 2, 2, 2"
Grid.Row="4"
Grid.Column="1">< /TextBox>
< Button x:Name="buttonSend"
Background="Transparent"
Margin="2, 2, 2, 2"
Grid.Row="4"
Grid.Column="2"
Click="buttonSend_Click"
Content="Send">< /Button>
< /Grid>
< /UserControl>
SilverLight client implementation consists of some feilds, constructor, connection event handlers, private methods, and UI event handlers
Feilds
namespace SilverlightApp
{
public partial class Page : UserControl
{
#region Feilds
//TIMER
DispatcherTimer _timer = null;
SVC.IbasicChatServiceClient proxy = null;
SVC.Chatter localChatter = null;
//List to hold online chatters
List< SVC.Chatter> chatters = new List< SilverlightApp.SVC.Chatter>();
//List to hold messages history
List< SVC.Message> messages = new List< SilverlightApp.SVC.Message>();
//To enable listbox auto scroll
bool flag = false;
#endregion
...
Page constructor
public Page()
{
InitializeComponent();
buttonLeave.IsEnabled = false;
buttonSend.IsEnabled = false;
textboxMsg.KeyDown += new KeyEventHandler(textboxMsg_KeyDown);
//Create Timer and set interval
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds(2);
_timer.Tick += new EventHandler(_timer_Tick);
}
Connection event handlers
#region Connection Event Handlers
void proxy_JoinCompleted(object sender, SilverlightApp.SVC.JoinCompletedEventArgs e)
{
if (e.Result)
{
labelStatus.Text = "Online";
this._timer.Start();
}
else
{
proxy.Close();
labelStatus.Text = "Name Found";
}
}
void proxy_LeaveCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
proxy.Close();
}
void proxy_GetMessagesCompleted(object sender, SilverlightApp.SVC.GetMessagesCompletedEventArgs e)
{
listBoxMsgs.Items.Clear();
foreach (SVC.Message msg in e.Result)
{
//This will not scroll the listbox
//listBoxMsgs.Items.Add(msg.Sender + " : " + msg.Content);
//Auto scroll, AddItem() is a private method
AddItem(msg.Sender + " : " + msg.Content);
flag = true;
}
}
void proxy_GetChattersCompleted(object sender, SilverlightApp.SVC.GetChattersCompletedEventArgs e)
{
listBoxNames.Items.Clear();
foreach (SVC.Chatter chtr in e.Result)
{
listBoxNames.Items.Add(chtr.Name);
}
}
void InnerChannel_Opened(object sender, EventArgs e)
{
HandleProxy();
}
void InnerChannel_Faulted(object sender, EventArgs e)
{
HandleProxy();
}
void InnerChannel_Closed(object sender, EventArgs e)
{
HandleProxy();
}
#endregion
Private methods
#region Private Methods
public void AddItem(String messageText)
{
listBoxMsgs.Items.Add(new ListBoxItem { Content = messageText });
}
private void Join()
{
proxy = null;
//CREATE PROXY
proxy = new SilverlightApp.SVC.IbasicChatServiceClient();
proxy.InnerChannel.Closed += new EventHandler(InnerChannel_Closed);
proxy.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
proxy.InnerChannel.Opened += new EventHandler(InnerChannel_Opened);
//CREATE LOCAL CLIENT
this.localChatter = new SilverlightApp.SVC.Chatter();
this.localChatter.Name = textboxName.Text.ToString();
this.localChatter.Time = DateTime.Now;
//JOIN()
proxy.JoinAsync(this.localChatter);
proxy.JoinCompleted +=
new EventHandler< SilverlightApp.SVC.JoinCompletedEventArgs>(proxy_JoinCompleted);
}
private void Send()
{
if (proxy != null && proxy.State == CommunicationState.Opened)
{
SVC.Message msg = new SilverlightApp.SVC.Message();
msg.Sender = this.localChatter.Name;
msg.Content = textboxMsg.Text.ToString();
msg.Time = DateTime.Now;
proxy.SayAsync(msg);
textboxMsg.Text = "";
}
else
{
HandleProxy();
}
}
private void HandleProxy()
{
if (proxy != null)
{
switch (proxy.State)
{
case CommunicationState.Closed:
proxy = null;
labelStatus.Text = "Offline";
buttonJoin.IsEnabled = true;
buttonLeave.IsEnabled = false;
buttonSend.IsEnabled = false;
listBoxMsgs.Items.Clear();
listBoxNames.Items.Clear();
break;
case CommunicationState.Closing:
break;
case CommunicationState.Created:
break;
case CommunicationState.Faulted:
proxy.Abort();
proxy = null;
labelStatus.Text = "Offline";
buttonJoin.IsEnabled = true;
buttonLeave.IsEnabled = false;
buttonSend.IsEnabled = false;
listBoxMsgs.Items.Clear();
listBoxNames.Items.Clear();
break;
case CommunicationState.Opened:
buttonJoin.IsEnabled = false;
buttonLeave.IsEnabled = true;
buttonSend.IsEnabled = true;
labelStatus.Text = "Online";
break;
case CommunicationState.Opening:
break;
default:
break;
}
}
else
{
//Join();
}
}
#endregion
And finally the UI event handlers
#region UI Events
void _timer_Tick(object sender, EventArgs e)
{
//Refresh online chatters and messages by calling GetChattersAsync() and GetMessagesAsync()
proxy.GetChattersAsync();
proxy.GetChattersCompleted +=
new EventHandler< SilverlightApp.SVC.GetChattersCompletedEventArgs>(proxy_GetChattersCompleted);
proxy.GetMessagesAsync();
proxy.GetMessagesCompleted +=
new EventHandler< SilverlightApp.SVC.GetMessagesCompletedEventArgs>(proxy_GetMessagesCompleted);
}
void textboxMsg_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Send();
}
}
private void buttonJoin_Click(object sender, RoutedEventArgs e)
{
Join();
}
private void buttonSend_Click(object sender, RoutedEventArgs e)
{
Send();
}
private void buttonLeave_Click(object sender, RoutedEventArgs e)
{
this._timer.Stop();
if (proxy != null && proxy.State == CommunicationState.Opened)
{
proxy.LeaveAsync(this.localChatter);
proxy.LeaveCompleted +=
new EventHandler< System.ComponentModel.AsyncCompletedEventArgs>(proxy_LeaveCompleted);
}
else
{
HandleProxy();
}
}
private void listBoxMsgs_LayoutUpdated(object sender, EventArgs e)
{
if (flag && listBoxMsgs.Items.Count > 1)
{
listBoxMsgs.ScrollIntoView(listBoxMsgs.Items[listBoxMsgs.Items.Count - 1]);
flag = false;
}
}
#endregion
Other Stuff
Enable cross domain calls for SilverLight application
In order to enable cross domain calls just copy this file clientaccesspolicy.xml to your host root, if you use IIS then
copy the file to WWWRoot folder and then restart IIS. (file is included in the source code).
110 comments:
Hello, Thank you for posting this code. I am getting a protocol exception "The remote server returned an unexpected response: (404) Not Found." when I send a message. Specifically this happens in the EndSay method of Reference.cs, which is generated in the service reference SCV. I suspect this error has something to do with the endpoint configuration but I can't figure it out. Any ideas?
Thanks, I don't know, never seen this exception message before, Could you include exception details in faults and implement try catch fault exception in the service to know exactly where the exception comes from?..
I am also having the 404 problem.
It happens in Reference.cs:505 after sending a message.
System.ServiceModel.CommunicationException wurde nicht von Benutzercode behandelt.
Message="The remote server returned an error: NotFound"
StackTrace:
bei System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
bei System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
bei System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
bei System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
bei SilverlightApp.SVC.IbasicChatServiceClient.IbasicChatServiceClientChannel.EndSay(IAsyncResult result)
bei SilverlightApp.SVC.IbasicChatServiceClient.SilverlightApp.SVC.IbasicChatService.EndSay(IAsyncResult result)
bei SilverlightApp.SVC.IbasicChatServiceClient.OnEndSay(IAsyncResult result)
bei System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
InnerException: System.Net.WebException
Message="The remote server returned an error: NotFound"
StackTrace:
bei System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
bei System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
bei System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
InnerException: System.Net.WebException
Message="The remote server returned an error: NotFound"
StackTrace:
bei System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
bei System.Net.BrowserHttpWebRequest.<>c__DisplayClass5. EndGetResponse b__4(Object sendState)
bei System.Net.AsyncHelper.<>c__DisplayClass2. BeginOnUI b__0(Object sendState)
InnerException:
Should you tell it — a false way. achat levitra Amazingly! Amazingly!
Je, pardon, mais cela ne me conviens pas du tout certes. Qui encore, peut aider ? http://cgi1.ebay.fr/eBayISAPI.dll?ViewUserPage&userid=acheter-cialis cialis sans ordonnances, acheter cialis
que dans un tel cas il faut faire ? acheter viagra acheter du viagra
Quels mots nГ©cessaires... super, la phrase brillante runfr.com cialis [url=http://runfr.com]achat cialis en ligne[/url]
Je fГ©licite, vous Г©tiez visitГ©s par l'idГ©e simplement excellente acheter du cialis acheter cialis [url=http://runfr.com/acheter-cialis]acheter cialis[/url]
how to buy cialis
mail order cialis china
cheap cialis india
what does generic cialis look like
how to get cialis no prescription
buy discount cialis online
online cialis canada
buy cialis online on sale 2000 buy cialis daily f
[url=http://www.playlist.com/blog/entry/12464022019]buying buy Levitra online[/url]
[url=http://www.playlist.com/blog/entry/12464011267]cialis brand name[/url]
[url=http://www.playlist.com/blog/entry/12464011267]cialis and grapefruit juice[/url]
[url=http://www.playlist.com/blog/entry/12464022019]chemical name for levitra[/url]
[url=http://www.playlist.com/blog/entry/12464022019]what is levitra[/url]
[url=http://www.playlist.com/blog/entry/12464030467]KAMAGRA SOFT Lowell[/url]
kamagra jelly supplier
Purchase In Nisku (Alberta) [url=http://www.wikipatterns.com/display/~zaeblo] where to buy online kamagra oral jelly[/url] buy kamagra oral jelly shipped ups.
Purchase In Bangor [url=http://www.wikipatterns.com/display/~toprol] toprol xl online saturday delivery[/url] cheap toprol xl 60 pills x 100 mg online.
Purchase In California [url=http://www.wikipatterns.com/display/~wertinskoi] Generic Viagra With American Express[/url] buy viagra $8 per pill.
Order In St. Jean-Sur-Richelieu (Quebec) [url=http://www.wikipatterns.com/display/~zerguni] buy Levitra online consultation us[/url] buy Levitra Plus diet pills. Buy In Norwich [url=http://www.wikipatterns.com/display/~thirtywow] chip kamagra[/url] Online generic Kamagra.
Buy In Elliot Lake (Ontario) [url=http://www.wikipatterns.com/display/~semen] cheap online propecia[/url] propecia versus rogaine. Order In Nordegg (Alberta) [url=http://connections.blackboard.com/people/4b1319a5ad] where can i buy viagra in[/url] buy cheap viagra online now uk.
When you sort Viagra or some other meds in our machine shop you may be reliable http://ipod-playlist.com/viagra.html discount Viagra Online that this issue simply of pre-eminent distinction bequeath be delivered to you systematically in time.
Aujourd'hui je lisais beaucoup sur cette question. http://www.ci2s.org cialis [url=http://www.ci2s.org]achat cialis[/url]
Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!
une phrase trГЁs intГ©ressante viagra achat viagra [url=http://lettresdudroit.com]viagra achat[/url]
pjvgwfwxwf wmhkxaifuf [url=http://www.lacasadicavour.com]cialis senza ricetta [/url] dydhokohuv jwpelcyzgg cialis sxiyuvmfqe zynehbregm
Je connais exactement que c'est l'erreur. achat viagra acheter viagra en ligne [url=http://lettresdudroit.com]viagra[/url]
knpoatwuww atbsjcmeoo [url=http://www.italtubi.com]levitra [/url] btzedowzut evoybusucc comprare levitra rgetzzrbvy cjoyolgyol levitra comprare http://www.italtubi.com
Quels mots nГ©cessaires... super, la phrase remarquable achat cialis achat cialis [url=http://www.ci2s.org]acheter cialis generique[/url]
que nous ferions sans votre trГЁs bonne idГ©e http://lettresdudroit.com/tag/acheter-viagra acheter viagra en ligne [url=http://lettresdudroit.com/tag/acheter-viagra]viagra sur le net[/url]
la rГ©ponse Autoritaire, cognitif... http://www.ci2s.org cialis [url=http://www.ci2s.org]cialis[/url]
remarquablement, la phrase trГЁs prГ©cieuse http://www.ci2s.org/node/1 cialis [url=http://www.ci2s.org/node/1]cialis en ligne[/url]
Je pense que c'est la voie fausse. Et de lui il faut rouler. cialis cialis en ligne [url=http://www.ci2s.org]acheter cialis generique[/url]
mais vous-mГЄmes, vous essayiez de faire ainsi ? viagra sur le net viagra [url=http://lettresdudroit.com/viagra-generique]viagra en ligne[/url]
le sujet Incomparable, il m'est intГ©ressant :) http://runfr.com/acheter-cialis cialis suisse [url=http://runfr.com]cialis prix[/url]
Bravo, ciГІ avrГ una grande idea solo a proposito ghagmfpsil upgonqgbej [url=http://www.lacasadicavour.com/cialis-generico-online/]cialis [/url] lmoncobqqd awdbrtgqcq cialis tbtkabbyca iubcjzltvg
Bravo, la tua idea ГЁ molto buona nxubkhwfss cevijpfooj [url=http://www.lacasadicavour.com/]cialis senza ricetta [/url] nlpahebmyu vrlwdurgjm cialis qfukpjipao jzxttcrkvi
il n'arrive pas Plus exactement pharmacie Dans cela quelque chose est. Merci pour l'information, peut, je peux vous aider aussi par quelque chose ? http://urban-france.org: pharmacie
ncfrduykhs ktfqnidxow [url=http://www.italtubi.com]levitra [/url] rlskxafqkp cqakomukqr comprare levitra cyrevuttlj hrwampvqhr
viagra 50 mg dralouulrj guswxwnxqw [url=http://csalamanca.com]comprar viagra [/url] mcndnvmkyp agngbtiqkr comprar viagra rapdrayvgq uuymwlnqnn
E dove il vostro logica? zrtvgwcmey jijvvfhqxi [url=http://www.lacasadicavour.com/cialis/]comprare cialis [/url] oowkyetjxw aeqphdvkpp cialis mfyifueonb nhlzzpkddf
Pour tout de bon. acheter cialis suisse cialis generique [url=http://runfr.com/cialis]acheter cialis sur internet[/url]
Vous Г©tiez visitГ©s par l'idГ©e simplement magnifique acheter cialis 20mg cialis prix [url=http://www.ci2s.org/blog]acheter du Cialis generique[/url]
bsiqebgliw pyoavvrgmw [url=http://www.italtubi.com/levitra/]levitra acquisto [/url] dnpoijijjl misbiwwigu generici bafkusurgh lomhermkix
drfokqfarn hynmxkleye [url=http://www.lacasadicavour.com/cialis-generico-online/]compra cialis online [/url] jdamatjquk qoefhdquki acquistare cialis mttsayqbux rbwjkvvuhc
Je n'en sais rien. [url=http://runfr.com/tag/le-cialis]cialis sur le net[/url] Je, pardon, mais cela ne me conviens pas du tout certes. Qui encore que peut souffler ? cialis en ligne
viagra 100 mg wgmeozeuwg tfhfrugkor [url=http://csalamanca.com]viagra [/url] btykphuhqg mfrpuogddk la viagra zmjitppxlq ameqalrqzg
kmoqnddluk nhwycjricz [url=http://www.lacasadicavour.com/]cialis [/url] icldegkqgd eajvqeftdc acquisto cialis online usdxhclbzi bzglekyeiu
Quels mots... super, la phrase excellente viagra sur le net viagra sur le net [url=http://lettresdudroit.com/viagra-generique]viagra[/url]
remarquablement, l'idГ©e trГЁs prГ©cieuse http://lettresdudroit.com/viagra-generique viagra [url=http://lettresdudroit.com]viagra[/url]
[url=http://italtubi.com/levitra/ ]levitra vendita [/url] ezSe si dice che sono sulla strada sbagliata. generico levitra
Merci immense, comment je peux vous remercier ? http://runfr.com/tag/cialis acheter cialis generique cialis 20mg
luujfbzitq ktqewuspij [url=http://lacasadicavour.com/trial-packs/ ]cialis 20 mg prezzi [/url] aiaucryswn zxofufmqpr comprare cialis sicuro pgdspixier tkiylswxno
que nous ferions sans votre phrase excellente http://runfr.com/tag/20mg cialis 20mg cialis 10mg
Felicito, su pensamiento simplemente excelente [url=http://csalamanca.com/tag/comprar-viagra/ ]viagra para mujeres [/url] ftixeaykvx vxoxmqbsjx la viagra
con usted no soy conforme [url=http://nuevascarreras.com/tag/cialis/ ]cialis precio [/url] Appositamente registrata presso il forum per dirvi molto per il suo aiuto in questa materia, come posso ringraziarvi? cialis precio espana
Maintenant tout est devenu clair, le merci bien pour l'explication. [url=http://www.ci2s.org]cialis[/url] vous-mГЄmes, vous avez inventГ© une telle rГ©ponse incomparable ? cialis
il me semble c'est la phrase excellente acheter viagra viagra prix [url=http://lettresdudroit.com]le viagra[/url]
Chez tous personnel partent aujourd'hui ? [url=http://www.ci2s.org]cialis[/url] il me semble c'est la phrase brillante cialis forum
pmxlbs http://www.playlist.com/blog/entry/12644389379 generic lexapro vjdzeb generic lexapro
nmvaok [url=http://www.playlist.com/blog/entry/12644389379]generic lexapro
[/url] dnuvki [url]http://www.playlist.com/blog/entry/12644389379[/url] generic lexapro
mbnbdz http://www.playlist.com/blog/entry/12644389635 cheap levitra egiztf cheap levitra
ghglws [url=http://www.playlist.com/blog/entry/12644389635]cheap levitra
[/url] mwiiva [url]http://www.playlist.com/blog/entry/12644389635[/url] cheap levitra
nnuzuh http://www.playlist.com/blog/entry/12648765187 imitrex generic knymvr imitrex generic
mzznwq [url=http://www.playlist.com/blog/entry/12648765187]imitrex generic
[/url] hmjfwx [url]http://www.playlist.com/blog/entry/12648765187[/url] imitrex generic
qqozez http://www.playlist.com/blog/entry/12648811011 buy kamagra xqaxtp buy kamagra
wumaxk [url=http://www.playlist.com/blog/entry/12648811011]buy kamagra
[/url] xbrcki [url]http://www.playlist.com/blog/entry/12648811011[/url] buy kamagra
Bravo, il me semble c'est l'idГ©e excellente http://runfr.com cialis france cialis generique en pharmacie
rafuzw http://www.playlist.com/blog/entry/12644389379 generic lexapro xsogrq generic lexapro
vxwacz [url=http://www.playlist.com/blog/entry/12644389379]generic lexapro
[/url] ipybek [url]http://www.playlist.com/blog/entry/12644389379[/url] generic lexapro
onbhzr http://www.playlist.com/blog/entry/12644389635 cheap levitrra pysplb cheap levitra
kotyre [url=http://www.playlist.com/blog/entry/12644389635]cheap levitra
[/url] rbfnzs [url]http://www.playlist.com/blog/entry/12644389635[/url] cheap levitra
bhrhbr http://www.playlist.com/blog/entry/12648765187 imitrex generic uxsxqd imitrex generic
ivoenz [url=http://www.playlist.com/blog/entry/12648765187]imitrex generic
[/url] kdunfu [url]http://www.playlist.com/blog/entry/12648765187[/url] imitrex generic
gmcgby http://www.playlist.com/blog/entry/12648811011 buy kamgra ueuxex buy kamagra
umplfa [url=http://www.playlist.com/blog/entry/12648811011]buy kamagra
[/url] lqrroh [url]http://www.playlist.com/blog/entry/12648811011[/url] buy kamagra
iihtnp http://www.archive.org/details/BuyLevitraOnlineNow buy levitra hyfydb buy levitra
lmdlzi [url=http://www.archive.org/details/BuyLevitraOnlineNow]buy levitra pills
[/url] ilfizc [url]http://www.archive.org/details/BuyLevitraOnlineNow[/url] buy levitra
ewstzh http://www.playlist.com/blog/entry/12644389379 generic lexapro xkbvnt generic lexapro
cceewc [url=http://www.playlist.com/blog/entry/12644389379]generic lexapro
[/url] eznysm [url]http://www.playlist.com/blog/entry/12644389379[/url] generic lexapro
kxwomj http://www.playlist.com/blog/entry/12644389635 cheap levitra lueasz cheap levitra
adfgbs [url=http://www.playlist.com/blog/entry/12644389635]cheap levitra
[/url] cmfenj [url]http://www.playlist.com/blog/entry/12644389635[/url] cheap levitra
hnhqlx http://www.playlist.com/blog/entry/12648765187 imitrex generic glajdl imitrex generic
thfgem [url=http://www.playlist.com/blog/entry/12648765187]imitrex generic
[/url] ijxrft [url]http://www.playlist.com/blog/entry/12648765187[/url] imitrex generic
cfkjjh http://www.playlist.com/blog/entry/12648811011 buy kamagra zpzgne buy kamagra
fiopjr [url=http://www.playlist.com/blog/entry/12648811011]buy kamagra
[/url] xntdvy [url]http://www.playlist.com/blog/entry/12648811011[/url] buy kamagra
urysdp http://www.archive.org/details/BuyLevitraOnlineNow buy levitra pills xpslre buy levitra
txeacw [url=http://www.archive.org/details/BuyLevitraOnlineNow]buy levitra pills
[/url] gheght [url]http://www.archive.org/details/BuyLevitraOnlineNow[/url] buy levitra
[url=http://www.devki.letisms.ru/map.html ]фото порно белья [/url]
[url=http://www.hutro4.letisms.ru ]Секс скачать бесплатно [/url]
[url=http://www.popkigu.letisms.ru/map.html ]порно фото памела андерсон [/url]
[url=http://www.devki.letisms.ru/map.html ]Откровенное фото пизды [/url]
wbckgx https://launchpad.net/~addisonbrquotation viagra pills for sale kvgihi viagra pills for sale
pfcepr [url=https://launchpad.net/~addisonbrquotation]viagra pills for sale
[/url] jktzkk [url]https://launchpad.net/~addisonbrquotation[/url] viagra pills for sale
gibocr https://launchpad.net/~mcgreevycolunynyt1348 generic viagra for sale jiehay generic viagra for sale
buocve [url=https://launchpad.net/~mcgreevycolunynyt1348]generic viagra for sale
[/url] ofqagh [url]https://launchpad.net/~mcgreevycolunynyt1348[/url] generic viagra for sale
kdaflk https://launchpad.net/~dalefyoboardinghouse cost of viagra tlrxde cost of viagra
oogois [url=https://launchpad.net/~dalefyoboardinghouse]cost of viagra
[/url] pdekhd [url]https://launchpad.net/~dalefyoboardinghouse[/url] cost of viagra
udwzdn https://launchpad.net/~halephloxnu low cost viagra xbfyfw low cost viagra
xrlaok [url=https://launchpad.net/~halephloxnu]low cost viagra
[/url] kertsv [url]https://launchpad.net/~halephloxnu[/url] low cost viagra
remarquablement, un trГЁs bon message cialis 20mg http://runfr.com/tag/tadalafil achat cialis cialis 20mg
la informaciГіn muy de valor http://nuevascarreras.com/category/cialis-generico/ cialis generico en mexico In particolare non vi ГЁ alcuna cialis vs viagra
qqskbh https://launchpad.net/~cialisforsale cialis for sale sjcsap cialis for sale
murowe [url=https://launchpad.net/~cialisforsale]cialis for sale
[/url] bugrnh [url]https://launchpad.net/~cialisforsale[/url] cialis for sale
xitruz https://launchpad.net/~tadlockcikuiqe1661 mail order cialis nfnlbr mail order cialis
msfjjn [url=https://launchpad.net/~tadlockcikuiqe1661]mail order cialis
[/url] segrfl [url]https://launchpad.net/~tadlockcikuiqe1661[/url] mail order cialis 200mg
[url=http://italtubi.com/tag/levitra/ ]vendita levitra [/url] irCongratulazioni, la tua idea brillantemente acquisto levitra online
sans variantes.... http://runfr.com viagra wikipedia cialis generique pas cher
detblx https://launchpad.net/~textorobipan1563 best price levitra ycyfie best price levitra
ctwwrd [url=https://launchpad.net/~textorobipan1563]best price levitra
[/url] nrcmue [url]https://launchpad.net/~textorobipan1563[/url] best price levitra
eprfuf https://launchpad.net/~jpdpegboardfrench buy levitra 20 mg zbrcxn buy levitra 20 mg online
xdzzvn [url=https://launchpad.net/~jpdpegboardfrench]buy levitra 20 mg
[/url] eypxaa [url]https://launchpad.net/~jpdpegboardfrench[/url] buy levitra 20 mg
Bravo, il me semble, c'est la phrase magnifique cialis http://runfr.com cialis generique 10mg cialis prix
Le merci bien. cialis cialis
Il est dommage que je ne peux pas m'exprimer maintenant - est beaucoup pris. Je reviendrai - j'exprimerai absolument l'opinion sur cette question. http://runfr.com/acheter-cialis cialis france achat cialis sur internet
Ich meine, dass Sie nicht recht sind. Es ich kann beweisen. viagra online kaufen viagra [url=http//t7-isis.org]viagra rezeptfrei kaufen[/url]
Dieses Thema ist einfach unvergleichlich:), mir gefällt))) viagra bestellen viagra online kaufen [url=http//t7-isis.org]viagra online kaufen[/url]
[url=http://www.rolik.letisms.ru/map.html ]Юольшие сиськи [/url] [url=http://www.kachat.letisms.ru/map.html ]Ебал пизду [/url] [url=http://www.valuxa.letisms.ru/map.html ]Большие сиськи сосут член [/url] [url=http://www.valuxa.letisms.ru/map.html ]Пиздо [/url] [url=http://www.kachat.letisms.ru ]Хуй кармане [/url] [url=http://www.gest.letisms.ru ]free гей порно [/url] [url=http://www.gest.letisms.ru ]секс онлайн порно [/url] [url=http://www.fresh.letisms.ru ]итальянский минет инцест [/url]
Sie irren sich. Es ich kann beweisen. Schreiben Sie mir in PM, wir werden besprechen. viagra viagra [url=http//t7-isis.org]viagra kaufen[/url]
Mir scheint es der glänzende Gedanke viagra rezeptfrei viagra kaufen [url=http//t7-isis.org]viagra kaufen[/url]
Wacker, dieser glänzende Gedanke fällt gerade übrigens viagra viagra rezeptfrei [url=http//t7-isis.org]viagra kaufen[/url]
il n'est pas droit absolument EJACULATION PREMATUREE
Est d'accord, cette opinion amusante cialis generique cialis generique
Eh bien, eh bien, il ne faut pas si parler. soigner ejaculation precoce
Nach meiner Meinung lassen Sie den Fehler zu. Es ich kann beweisen. Schreiben Sie mir in PM. viagra bestellen viagra [url=http//t7-isis.org]viagra bestellen[/url]
Ce message simplement incomparable) controler ejaculation
Es ist Gelöscht (hat den Abschnitt) verwirrt viagra kaufen viagra bestellen [url=http//t7-isis.org]viagra rezeptfrei[/url]
on peut examiner cela infiniment traitement ejaculation precoce
ich beglückwünsche, mir scheint es der prächtige Gedanke viagra rezeptfrei viagra [url=http//t7-isis.org]viagra kaufen[/url]
Este asunto de sus manos! http://nuevascarreras.com/comprar-cialis-es/ comprar cialis en espana Autorevole risposta cialis dosis oprdwkeybc [url=http://www.mister-wong.es/user/COMPRARCIALIS/comprar-viagra/]la viagra[/url]
Viene raggiunto il maggior numero di punti. Ottima idea, condivido. [url=http://lacasadicavour.com/ ]cialis 20 mg prezzo [/url]dove catty mondo? generico cialis Non a tutti.
ГЂ mon avis ici quelqu'un s'est fait une obsession cialis 20mg http://runfr.com cialis 20mg lilly viagra pour femme
Maintenant tout m'est devenu clair, je remercie de l'aide dans cette question. ejaculation precose
A mio parere, si sbaglia. Cerchiamo di discutere di questo. Scrivere a me in PM, ti parla. [url=http://lacasadicavour.com/eriacta/ ]acquisto cialis generico [/url]Mi piace questa idea, sono pienamente d'accordo con te. cialis senza ricetta Appositamente registrata presso il forum per dirvi molto per il vostro sostegno.
http://www.universi.org.uk/forum/index.php/topic,53927.0.html
http://www.derdunkleorden.org/board/thwb/showtopic.php?threadid=36622&time=&pagenum=lastpage
http://www.insoft-vvo.ru/forum/viewtopic.php?p=101765
Esto se extralimita. http://nuevascarreras.com/tag/cialis/ cialis 20 mg efectos Potete consigliamo di visitare il sito, con un enorme numero di articoli sul tema che vi interessa. cialis 20 mg prospecto
Que frase simpГЎtica [url=http://csalamanca.com/comprar-viagra-generico/ ]viagra sin receta buenos aires [/url] qfnaoeiezh cnxizeelqx viagra para mujeres
あなたは(英語/日本語)を話しますか? [url=http://japanese-garden.org]バイアグラ 個人輸入[/url] バイアグラ 個人輸入
Oui, en effet. Je suis d'accord avec tout plus haut par dit. http://runfr.com acheter viagra en france acheter cialis sur internet
es imposible discutir Infinitamente [url=http://csalamanca.com/comprar-viagra-generico/ ]viagra genericos [/url] Absolutamente con Ud es conforme. Pienso que es la idea buena. comprar viagra en argentina
Je demande pardon, cela ne me convient pas. Qui encore que peut souffler ? [url=http://runfr.com/cialis]forum ou acheter cialis[/url] http://runfr.com/acheter-cialis generic cialis tadalafil achete du cialis mйdicament йrectil cialis sans prescription en belgique.be
directement au but [url=http://runfr.com/acheter-cialis]achat viagra[/url] http://runfr.com/cialis cialis douleur aux jambes cialis viagra forum
Tout cela seulement la convention, pas plus [url=http://runfr.com]promotion generique viagra 10 gratuit[/url] http://runfr.com/acheter-cialis achat cialis sur internet viagra sur le net cialis 10mg prix
Pienso que no sois derecho. Escriban en PM, se comunicaremos. [url=http://csalamanca.com/comprar-viagra-generico/ ]viagra sin receta [/url] Y cГіmo parafrasearlo? viagra generico contrareembolso
Oui tout cela l'imaginaire [url=http://runfr.com]sialis[/url] http://runfr.com/acheter-cialis cialis en pharmacie viagra sur le net cialis en suisse sans ordonnance
Quels mots... super http://runfr.com cialis achat cialis sur internet
Que sur cela direz ? [url=http://runfr.com/cialis]viagra cialis acheter[/url] http://runfr.com cialis en suisse viagra forum cialis forum
Dans cela quelque chose est. Je vous remercie de l'aide dans cette question, je peux je peux qu'aider aussi cela ? [url=http://runfr.com]cialis dysfonction erectile[/url] http://runfr.com/acheter-cialis ou acheter cialis en france viagra en ligne viagra generique
Excusez que je vous interromps, je veux exprimer aussi l'opinion. [url=http://runfr.com]achat viagra sans ordonnance[/url] http://runfr.com/acheter-cialis fabricant cialis generique cialis 20mg forum cialis
Je peux proposer de venir sur le site, sur qui il y a beaucoup d'information sur cette question. [url=http://runfr.com/acheter-cialis]cialis generique[/url] http://runfr.com/cialis medicaments contre l'hypertension et viagra viagra generique achat cialis
Voici cela oui! achat cialis http://runfr.com cialis 20mg belgique viagra
Dans cela quelque chose est. Je vous remercie de l'aide dans cette question, je peux je peux qu'aider aussi cela ? [url=http://runfr.com/acheter-cialis]cialis[/url] http://runfr.com/acheter-cialis cialis prix 5mg cialis generique adresse belgique viagra
Excusez, j'ai pensГ© et a Г©loignГ© le message [url=http://runfr.com/acheter-cialis]cialis 5mg[/url] http://runfr.com generique de cialis quand utiliser cialis cialis 10mg
je peux avec vous acceptera. [url=http://runfr.com]cialis 2,5mg[/url] http://runfr.com/cialis comprimй cialis cialis generic viagra sur le net
C'est simplement incomparable topic [url=http://runfr.com/acheter-cialis]cialis generique[/url] http://runfr.com viagra sur le net ou acheter du cialis? acheter cialis
la situation Absurde a rГ©sultГ© [url=http://runfr.com]cialis 10mg[/url] http://runfr.com/cialis cialis 10mg omprimes viagra generique prix viagra forum
le point de vue Autoritaire, d'une maniГЁre amusante... [url=http://runfr.com/cialis]achat cialis[/url] http://runfr.com dans les pharmacie belge le viagra est il en vente sans ordonnance? ou acheter du cialis? cialis effet secondaire
C'est la rГ©ponse trГЁs prГ©cieuse cialis 20mg http://runfr.com cialis 20mg belgique cialis 20 mg tadalafil
je FГ©licite, votre idГ©e sera utile [url=http://runfr.com/acheter-cialis]achat cialis[/url] http://runfr.com/cialis viagra cialis acheter acheter viagra cialis 20mg
Je ne vois pas dans cela le sens. [url=http://runfr.com]cialis online[/url] http://runfr.com les effets a long terme du viagra et cialis cialis generique france cialis 10mg
vous vous ГЄtes trompГ©s Г©videmment [url=http://runfr.com]cialis 20mg[/url] http://runfr.com/acheter-cialis cialis gnrique achat viagra cialis 20
le Talent, tu ne diras rien. cialis 20mg cialis generique
quelque chose ne rГ©ussit pas ainsi [url=http://runfr.com]cialis generic[/url] http://runfr.com/cialis acheter cialis gйnйrique cialis 20mg cialis generique pro
Post a Comment