[Silverlight入门系列]独立部署WCF Ria Service(单独/跨域)
时间:2011-02-22 来源:Mainz
1. 下载WCF Ria Service Toolkit Oct2010: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a23325ef-7b1f-4c92-9fd5-ffee48f7c7bc
2. 在vs2010中新建一个silverlight4的application,一个空的项目即可。
3. 由于WCF Ria Service是依托于网站的,所以在vs2010中新建一个Asp.net web application。在这个项目中添加一个ADO.net Data Entity Model(链接到数据库,这个过程怎么弄可以自己google一下)
4. 添加一个Domain Service Class,名字就叫 DomainService1,就是针对上一步的entity的。会自动生成几个方法。
5. 添加一个Silverlight enabled WCF Service:
6. 在里面写一个方法,调用上面第四步domain service的方法,代码:
using System;
using System.Linq;using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
namespace WebApplication1
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SLEnalbedWcfService1
{
DomainService1 s1 = new DomainService1();
[OperationContract]
public string GetFirstTestRecord()
{
return s1.GetTestList().First().RecordName;
}
// Add more operations here and mark them with [OperationContract]
}
}
7. 添加一个文件,叫clientaccesspolicy.xml,内容如下,是用来解决跨域的问题支持跨域访问的:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
8. 启动网站,(或者在IIS部署该网站)
9. 在IE中尝试访问该网站,并访问WCF Service的svc地址,例如:http://localhost:7354/SLEnalbedWcfService1.svc
10. 点击里面的第一个链接,会显示wsdl的内容,拷贝url:就是IE地址栏里面wsdl的地址
11. 在先前建立的silverlight项目中,右键点击silverlight项目(不是托管网站.web那个),添加服务引用(Add Service Reference)
12. 输入刚才拷贝的wsdl地址,点击Go,输入一个你希望的nameSpace(随便),如图:
13. vs2010会自动给你生成代理类,并修改config文件
14. 在MainPage.xaml.cs里面就可以调用这个服务的方法了:
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
{
//ServiceReference1 是12步你输入的namespace
ServiceReference1.SLEnalbedWcfService1Client client = new ServiceReference1.SLEnalbedWcfService1Client();
public MainPage()
{
InitializeComponent();
//Silverlight跨域调用wcf ria service肯定是异步的(用Winform调用wcf ria service可以是同步的!)
client.GetFirstRecordCompleted += delegate(object sender, ServiceReference1.GetFirstRecordCompletedEventArgs e) {
if (e.Error == null)
this.label2.Content = e.Result;
else
this.label2.Content = e.Error.Message;
};
client.GetFirstRecordAsync();
}
}
}
15. 如果您是IIS中,还有其他的权限设置,另外还要启动WCF服务。
16. 单独部署WCF Ria Service,跨域问题的解决,等等,这儿有一些其他的国外资源:
http://blogs.msdn.com/b/brada/archive/2009/11/22/ria-services-a-domainservice-is-a-wcf-service-add-service-reference.aspx
http://timheuer.com/blog/archive/2009/12/10/tips-to-deploy-ria-services-troubleshoot.aspx
http://blogs.msdn.com/b/drnick/archive/2009/12/30/deploying-wcf-ria-services-system-files.aspx