You can use RIA services as a normal WCF service with several clients. For example as Excel OData-Source or as data delivery service for your Windows Phone 7 application. To achieve this goal you have to install the latest RIA Services Toolkit and do a little configuration work.
Reference for Microsoft.ServiceModel.DomainServices.Hosting
Add a reference of Microsoft.ServiceModel.DomainServices.Hosting to your RIA Services project.
It is important that you choose the version which was shipped by the RIA Services (Silverlight) toolkit. The standard standard assembly from the SDK does not contain the SoapXmlEndpointFactory and JSonEndpointFactory.
So take this one:
For the OData endpoint you need the System.ServiceModel.DomainServices.Hosting.OData assembly from the SDK directory.
Configure the endpoints
Configure the Json, Soap and OData endpoints in the web.config:
<system.serviceModel>
<domainServices>
<endpoints>
<add name="Soap"
type="Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="Json"
type="Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="OData"
type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory, System.ServiceModel.DomainServices.Hosting.OData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</endpoints>
</domainServices>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Using of RIA Services in your Windows Phone 7 application
To use the rias service (Soap endpoint) in your Windows Phone 7 application you have only to add a new reference and enter the Uri of your ria service.
Your Uri consists of the <namespace of your ria service>-<classname of your ria service>.svc where “.” are replaced with “-“ !
Now you can create a proxy client and access to your Domainservice methods:
1: public partial class MainPage : PhoneApplicationPage
2: {
3: object _selectedItem;
4: PrivatbilanzService.FinancialPlanningDomainServiceSoapClient client;
5:
6: public MainPage()
7: {
8: InitializeComponent();
9:
10: client = new PrivatbilanzService.FinancialPlanningDomainServiceSoapClient();
11:
12: SupportedOrientations = SupportedPageOrientation.Portrait;
13: Loaded += new RoutedEventHandler(MainPage_Loaded);
14:
15: PageTransitionList.Completed += new EventHandler(PageTransitionList_Completed);
16:
17: // Set the data context of the listbox control to the sample data
18: DataContext = new MainViewModel();
19: }
Uri of all endpoints
The Uri for our exposed endpoints are:
OData : http://localhost:[portnumber]/<namespace of your ria service>-<classname of your ria service>.svc/OData/
SOAP: http://localhost:[portnumber]/<namespace of your ria service>-<classname of your ria service>.svc
JSON: http://localhost:[portnumber]/<namespace of your ria service>-<classname of your ria service>.svc/JSON/
With these exposed endpoints, you can talk to multiple clients:
- Excel Power pivot - Using the OData endpoint
- Windows Phone 7 – Using the SOAP endpoint
- AJAX client – Using the JSON endpoint