-
Aug 11th, 2009, 10:53 PM
#1
Thread Starter
Hyperactive Member
silverlight and database
Basically I am hosting my website on a linux server. My website is running in php using a mysql database. I have been playing around with silverlight because I have good knowledge in c# and would like to create some fancy silverlight applications. However the data that the silverlight application will use is going to come from the mysql database. From my understanding silverlight runs on the client machine so you cant directly access mysql. So I read up on it some more and people were suggesting a wcf service. However, from what I was reading it only runs on a windows machine with iis. So what are the options for me. Isnt there an easy way to talk to a mysql database. I dont really know anything about web services but I have good knowledge in php, mysql, and c#. Any help at all is appreciated.
If I helped you please rate me.
-
Aug 12th, 2009, 07:48 AM
#2
Re: silverlight and database
Not an expert in SL myself but I run across such a problem a few days ago. Basically, you have to create an indirect mechanism of getting the data from the SL application. One is WCF. Another is to create a web service. Yet another would be to use an HTTP Post which would trigger the needed query to MySql and retrieve the response with the data - see the HttpWebRequest class.
-
Aug 12th, 2009, 02:47 PM
#3
Thread Starter
Hyperactive Member
Re: silverlight and database
I have tried to use httpwebrequest with silverlight but when I put in this line:
Code:
byte[] buffer = Encoding.ASCII.GetBytes("username=test");
it is giving me this error:
System.Text.Encoding does not contain a definition for "ASCII".
However when I am typing it out it shows the method fine. I have the System.Text namespace in my project. Any ideas?
Also it is giving me errors for System.Net.HttpWebRequest on contentlength, getrequeststream, and getresponse for not containing a definition. I used the same code I had in a windows form project that worked fine.
If I helped you please rate me.
-
Aug 12th, 2009, 03:14 PM
#4
Re: silverlight and database
Encoding.ASCII does not exist in the Silverlight runtime - at least my intellisense isn't showing it. If you copied this from a WinForms project, that must be the cause of your problem.
I quickly wrote this to confirm how it can be done.
VB Code:
Private Sub cmdCallService_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Try
Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.contra.gr/rss/home"), HttpWebRequest)
req.BeginGetResponse(New AsyncCallback(AddressOf responseHandler), req)
Catch ex As Exception
txtServiceResult.Text = ex.Message
End Try
End Sub
Private Sub responseHandler(ByVal asyncResult As IAsyncResult)
Try
Dim req As HttpWebRequest = CType(asyncResult.AsyncState, HttpWebRequest)
Dim rsp As HttpWebResponse = CType(req.EndGetResponse(asyncResult), HttpWebResponse)
Dim b() As Byte
ReDim b(Convert.ToInt32(rsp.GetResponseStream.Length - 1))
rsp.GetResponseStream.Read(b, 0, b.GetLength(0))
rsp.Close()
Catch ex As Exception
txtServiceResult.Text = ex.Message
End Try
End Sub
Included System.Net and added an 'Imports System.Net'. It works great. Can you post more info on the errors you're getting along with some code?
-
Aug 12th, 2009, 03:30 PM
#5
Thread Starter
Hyperactive Member
Re: silverlight and database
I just tried the code that you gave me and I got this:
An unhandled exception('Unhandled error in Silverlight Application Invalid cross-thread access. at MS.Internal.XcpImports.CheckThread() at System.Windows.DependencyObject SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isSetByStyle, Boolean
It looks like it is cutting of the rest of the error. Any ideas? I added a reference to System.Net and did an Imports System.Net as well. No build errors just comes up when I run it.
If I helped you please rate me.
-
Aug 12th, 2009, 03:37 PM
#6
Re: silverlight and database
No idea where this comes from.
The XAML that comes with the code:
Code:
<UserControl x:Class="SLTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<Button x:Name="cmdCallService" HorizontalAlignment="Left" Margin="126,137,0,0" VerticalAlignment="Top" Width="75" Content="Button" Click="cmdCallService_Click"/>
<TextBox x:Name="txtServiceResult" Margin="126,193,87,89" Text="TextBox" TextWrapping="Wrap"/>
</Grid>
</UserControl>
And BTW, using VS 2008 9.0.30729.1 SP and Silverlight 3 here.
Can you debug and determine what line throws the error?
-
Aug 12th, 2009, 04:01 PM
#7
Thread Starter
Hyperactive Member
Re: silverlight and database
Ok so now I rebooted my computer, turned of wamp(whoops) and tried connecting running it and it shows up in my browser(firefox). Then when I click the button it says transferring data from www.contra.gr (in the status bar of firefox) but nothing ever shows up in the textbox. Any ideas?
If I helped you please rate me.
-
Aug 12th, 2009, 04:07 PM
#8
Re: silverlight and database
I've an idea if you're using the code I've posted...I didn't bother to copy the contents of the response to the textbox. I just inspected the byte array b with the debugger.
-
Aug 12th, 2009, 04:08 PM
#9
Thread Starter
Hyperactive Member
Re: silverlight and database
How do you do that? I havent really messed much with debugging. Also how would I write the response to the textbox.
If I helped you please rate me.
-
Aug 12th, 2009, 04:34 PM
#10
Re: silverlight and database
Are you using Visual Studio or are you compiling from the command line? If you're using studio, check the Debug menu.
Anyway, here's the code that copies the results to the textbox (XAML remains the same).
VB Code:
Imports System.Net
Partial Public Class MainPage
Inherits UserControl
Private Delegate Sub CheckBoxUpdateDelegate(ByVal s As String)
Public Sub New()
InitializeComponent()
End Sub
Private Sub cmdCallService_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Try
Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.contra.gr/rss/home"), HttpWebRequest)
req.BeginGetResponse(New AsyncCallback(AddressOf responseHandler), req)
Catch ex As Exception
txtServiceResult.Text = ex.Message
End Try
End Sub
Private Sub responseHandler(ByVal asyncResult As IAsyncResult)
Try
Dim req As HttpWebRequest = CType(asyncResult.AsyncState, HttpWebRequest)
Dim rsp As HttpWebResponse = CType(req.EndGetResponse(asyncResult), HttpWebResponse)
Dim b() As Byte
ReDim b(Convert.ToInt32(rsp.GetResponseStream.Length - 1))
rsp.GetResponseStream.Read(b, 0, b.GetLength(0))
rsp.Close()
Dim s As String = System.Text.Encoding.GetEncoding("utf-8").GetChars(b)
Deployment.Current.Dispatcher.BeginInvoke(System.Delegate.CreateDelegate(GetType(CheckBoxUpdateDelegate), Me, "updateTextBox"), New Object() {s})
Catch ex As Exception
Deployment.Current.Dispatcher.BeginInvoke(System.Delegate.CreateDelegate(GetType(CheckBoxUpdateDelegate), Me, "updateTextBox"), New Object() {ex.Message})
End Try
End Sub
Private Sub updateTextBox(ByVal s As String)
Try
txtServiceResult.Text = s
Catch ex As Exception
txtServiceResult.Text = ex.Message
End Try
End Sub
End Class
Note that I've added the delegate, which helps me to post a string on the UI while not on the UI thread - that's why you were getting the 'Invalid cross-thread access' exception before. That means that I can't just go access some part of the user interface (like txtServiceResult.Text) without properly marshalling my call.
Anyway, it must be working now. Once you hit the command button, the text box fills with the response.
-
Aug 12th, 2009, 04:41 PM
#11
Thread Starter
Hyperactive Member
Re: silverlight and database
Cool that works good on that website. However, I tried it on another website and nothing showed up in the textbox. Does that only read xml documents? How does this method work? Is it posting data to the server and getting a response from the server?
If I helped you please rate me.
-
Aug 12th, 2009, 05:16 PM
#12
Re: silverlight and database
This uses an HTTP GET (essentially what your browser does what you point it to a URL), but I think you can change that using the Method property of HttpWebRequest.
I noticed that it doesn't work on other sites as well. However, it's not confined to xml, because this site works. I've put a WireShark trace - it seems that on the sites it fails (an exception is thrown at line 24), Silvelight tries to retrieve clientaccesspolicy.xml and then crossdomain.xml, both without success (404). Geez, I've no idea why this happens.
-
Oct 8th, 2009, 05:32 PM
#13
Re: silverlight and database
Originally Posted by ntg
Silvelight tries to retrieve clientaccesspolicy.xml and then crossdomain.xml, both without success (404). Geez, I've no idea why this happens.
Through probably too late for your question I'll post for others to see.
When making a request to a cross-domain site Silverlight will attempt to download the Silverlight policy file clientaccesspolicy.xml (from the root of the target domain). If there is no Silverlight policy file then it will look for a Flash policy file crossdoamin.xml (from the root of the target domain again).
If neither of these file are found at the root then Silverlight will throw a SecurityException of access denied.
For a more in-depth explanation: Network Security Access Restrictions in Silverlight
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|