Вы можете получить данные из MySQL с помощью веб-сервисов.
Пошаговое руководство:
Шаг 1. Создание веб-служб
Шаг 2. Добавление служебной ссылки в Silverlight
<ч />
Шаг 1. Создание веб-служб
Добавление нового проекта Silverlight.
Создать новый веб-сервис. Щелкните правой кнопкой мыши веб-проект> Добавить> Новый элемент
Выберите «Веб-сервис».
Исходный код нового веб-сервиса.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
namespace SilverlightApplication1.Web
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
Чтобы веб-служба могла подключаться к MySQL, нам нужно добавить ссылку на MySql.Data.DLL в веб-проект и добавить оператор Using в верхней части класса веб-службы:
using MySql.Data.MySqlClient;
HelloWorld () - это исходный метод, созданный Visual Studio. Вы можете удалить его, так как он не нужен. Я собираюсь создать 2 простых метода, чтобы продемонстрировать, как веб-сервисы используются для связи между SilverLight и MySQL.
Первый метод: ExecuteScalar ()
Этот метод прост. Получить один объект из MySQL.
public string ExecuteScalar(string sql)
{
try
{
string result = "";
using (MySqlConnection conn = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand())
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = sql;
result = cmd.ExecuteScalar() + "";
conn.Close();
}
}
return result;
}
catch (Exception ex)
{
return ex.Message;
}
}
Второй метод: ExecuteNonQuery ()
Для одиночного выполнения SQL. Пример типа SQL: INSERT, UPDATE, DELETE.
public string ExecuteNonQuery(string sql)
{
try
{
long i = 0;
using (MySqlConnection conn = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand())
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = sql;
i = cmd.ExecuteNonQuery();
conn.Close();
}
}
return i + " row(s) affected by the last command, no resultset returned.";
}
catch (Exception ex)
{
return ex.Message;
}
}
Так выглядит веб-служба после добавления двух методов выше:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using MySql.Data.MySqlClient;
namespace SilverlightApplication1.Web
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
string constr = "server=localhost;user=root;pwd=1234;database=test;";
[WebMethod]
public string ExecuteScalar(string sql)
{
try
{
string result = "";
using (MySqlConnection conn = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand())
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = sql;
result = cmd.ExecuteScalar() + "";
conn.Close();
}
}
return result;
}
catch (Exception ex)
{
return ex.Message;
}
}
[WebMethod]
public string ExecuteNonQuery(string sql)
{
try
{
long i = 0;
using (MySqlConnection conn = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand())
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = sql;
i = cmd.ExecuteNonQuery();
conn.Close();
}
}
return i + " row(s) affected by the last command, no resultset returned.";
}
catch (Exception ex)
{
return ex.Message;
}
}
}
}
Вы заметите, что к методам добавлен атрибут [WebMethod] .
Перестройте проект и дайте веб-службе быть готовой к следующему шагу.
Разрешение доступа к веб-службе
Обратите внимание, что по умолчанию веб-служба разрешает доступ только тем Silverlight, которые размещены в одном домене с веб-службой. Если приложение Silverlight размещено на другом веб-сайте / домене, веб-служба будет отказывать в связи. Поэтому нам необходимо настроить разрешение для доступа к веб-службе Silverlight, размещенной в другом домене.
Вам необходимо создать два дополнительных файла: clientaccesspolicy.xml и crossdomain.xml .
Эти файлы должны быть помещены в корень домена, где размещены веб-службы.
Пример: <a href="http://www.mywebsite.com/clientaccesspolicy.xml" rel="nofollow noreferrer">http://www.mywebsite.com/clientaccesspolicy.xml</a>
и <a href="http://www.mywebsite.com/crossdomain.xml" rel="nofollow noreferrer">http://www.mywebsite.com/crossdomain.xml</a>
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Если вы хотите разрешить доступ к веб-службе только с определенного домена (например, www.myanotherwebsite.com), вы можете добавить его в. Пример: * 1 087 *
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="http://www.myanotherwebsite.com"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
crossdomain.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/>
</cross-domain-policy>
Чтобы узнать больше об этом, прочитайте: Обеспечение доступности службы через границы домена (MSDN)
<ч />
Шаг 2. Добавление служебной ссылки в Silverlight
Добавление служебной ссылки в Silverlight.
Введите адрес веб-службы и нажмите [Go].
Пример адреса: http://www.mywebsite.com/MyCoolWebService.asmx
Измените Пространство имен в свою пользу и нажмите [OK].
Visual Studio проанализирует веб-службу, выполнит привязку данных и создаст класс.
Прежде чем продолжить кодирование, давайте посмотрим, какие методы мы можем использовать в новом созданном классе. Щелкните правой кнопкой мыши новый класс и выберите [View in Object Browser].
Класс, который мы собираемся использовать, - это WebService1SoapClient (в этом примере). Наименование основывается на имени службы. Если мы назовем наш класс обслуживания MyCoolWebService, то MyCoolWebServiceSoapClient будет выбран в качестве имени класса в Silverlight. На правой панели выделены два метода и два события. Это методы, используемые для вызова веб-сервисов.
Позволяет создать простое приложение Silverlight, добавив текстовое поле и две кнопки.
В этом примере пользователь вводит SQL-запрос непосредственно в текстовое поле.
Кнопка [ExecuteScalar] отправит SQL-запрос в веб-службу и получит данные обратно. (ВЫБРАТЬ, ПОКАЗАТЬ и т. Д.)
Кнопка [ExecuteNonQuery] отправит SQL-запрос в веб-службу только для выполнения. (ВСТАВИТЬ, ОБНОВИТЬ, УДАЛИТЬ и т. Д.)
Это исходный код MainPage.xaml:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void btExecuteScalar_Click(object sender, RoutedEventArgs e)
{
}
private void btExecuteNonQuery_Click(object sender, RoutedEventArgs e)
{
}
}
}
Теперь вот что мы собираемся сделать здесь:
- Объявите службу как статический объект на уровне класса:
ServiceReference1.WebService1SoapClient
- Создать событие завершения службы двумя методами.
- Позвоните в сервис в случае нажатия кнопки.
- Отображение результата службы: MessageBox.Show ()
public partial class MainPage : UserControl
{
ServiceReference1.WebService1SoapClient myService;
public MainPage()
{
InitializeComponent();
myService = new ServiceReference1.WebService1SoapClient();
myService.ExecuteScalarCompleted += myService_ExecuteScalarCompleted;
myService.ExecuteNonQueryCompleted += myService_ExecuteNonQueryCompleted;
}
void myService_ExecuteNonQueryCompleted(object sender,
ServiceReference1.ExecuteNonQueryCompletedEventArgs e)
{
MessageBox.Show(e.Result);
}
void myService_ExecuteScalarCompleted(object sender,
ServiceReference1.ExecuteScalarCompletedEventArgs e)
{
MessageBox.Show(e.Result);
}
private void btExecuteScalar_Click(object sender, RoutedEventArgs e)
{
myService.ExecuteScalarAsync(textBox1.Text);
}
private void btExecuteNonQuery_Click(object sender, RoutedEventArgs e)
{
myService.ExecuteNonQueryAsync(textBox1.Text);
}
}
Нажмите [F5], запустите и протестируйте приложение Silverlight.
Вместе с вашим творчеством, я верю, что вы можете сделать что-то большее, чем это сейчас Smile | :)
Если вы внесли какие-либо изменения в веб-службу, возможно, вы добавили новую службу (новые веб-методы), вам необходимо обновить ссылку на службу в Silverlight, чтобы заново привязать службы. Возможно, вы захотите обновить адрес веб-службы, если вы загрузили файлы на другой веб-хостинг.
Удачного кодирования.
Подробнее:
- Оригинальный пост - Соединение MySQL с SilverLight с веб-сервисами - CodeProject.com (написано мной)
- Доступ к веб-службе из приложения Silverlight
- КАК: Написать простой веб-сервис с использованием Visual C # .NET
- Как: создать сервис для клиентов Silverlight