最初接触sivlerlight是2.0的时代,当时处在与对siverlight的摸索阶段,尚未实际开发项目,2009年在esri的arcgis9.1的siverlight接口基础上开发了gis系统,2009年WCF RIA技术出来的时候还没来得及研究,现在又有了一个项目要做,我想是时候尝试WCF RIA了.
WCF RIA 相比传统的WCF更像是给Siverlight专门定做,不再需要添加web引用,具有更高的安全性,更高的效率,有关WCF RIA与WCF的区别就不单独说了,说说我遇到的问题和解决办法吧.
当决定了采用WCF后,我先上网看看了看例子,感觉简单,就照着做了,不过有点区别的是我的数据库没有采用mssqlserver,原因很简单,电信喜欢oracle。按照说明,第一步:首先我们打开VS2010,新建一个Silverlight应用程序项目
第二步:点击确定之后,在弹出的“新建Silverlight应用程序”窗口中,选中“启用 WCF RIA 服务”复选框然后确定。
第三步:在创建好的项目SilverlightApplication2.Web上点右键,选择添加->新建项,在新建项中选择Domain Sevice Class
第四步,因为我没有采用ADO.net Entity FrameWork,因此我没有什么实体对象可以选择的,点确定即可
好,系统帮我们生成了MyService类,继承于: DomainService,一切都很好,再尝试加上个函数看看
public int add(int a, int b)
{
return a + b;
}
编译一下,好像没问题,在Siverlight工程上点显示所有按钮,在解决方案管理器中显示出一个新的目录出现了, 里面有一个SilverlightApplication2.Web.g.cs文件,系统自动帮我们在silverlight客户端生成了服务调用代码,看看吧
add函数已经被加入到这个文件中,我尝试去调用一下看看
对客户端的MainPage的xaml文件进行修改,修改的代码如下
<UserControl x:Class="SilverlightApplication2.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:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> <Grid x:Name="LayoutRoot" Background="White"> <sdk:Label Height="23" HorizontalAlignment="Left" Margin="146,104,0,0" Name="label1" VerticalAlignment="Top" Width="16" Content="+"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="81,100,0,0" Name="textBox1" VerticalAlignment="Top" Width="59" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="159,100,0,0" Name="textBox2" VerticalAlignment="Top" Width="47" /> <Button Content="计算" Height="23" HorizontalAlignment="Left" Margin="123,154,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="212,100,0,0" Name="textBlock1" Text="=" VerticalAlignment="Top" Width="23" /> <TextBlock Height="23" HorizontalAlignment="Left" Margin="248,101,0,0" Name="textBlock2" Text="" VerticalAlignment="Top" /> </Grid> </UserControl>
在MainPage.cs里加上对Add方法的调用
private void button1_Click(object sender, RoutedEventArgs e)
{
Web.MyContext context = new Web.MyContext();
InvokeOperation<int> data = context.add(int.Parse(textBox1.Text), int.Parse(textBox2.Text));
data.Completed += (s, ee) =>
{
InvokeOperation<int> oper = (s as InvokeOperation<int>);
if (oper.HasError)
{
MessageBox.Show("读取数据错误,原因是:" + oper.Error.Message, "错误信息!", MessageBoxButton.OK);
oper.MarkErrorAsHandled();
}
else
{
textBlock2.Text = oper.Value.ToString();
}
};
}
运行后界面显示上正常显示调用结果
看起来一切挺好的,我已经调用WCF成功了,明天继续