Introduction
Xamarin Form could be the most attractive tool on mobile App development. But right now, consuming WCF from Xamarin Form PCL can be still a kind of challenge. To get this feature, our development team spent a lot of effort. The final success approach is rather tricky. To share with the community, we would like to post a detailed step by step description here.
Background
The development environment is Windows 10 Home and Visual Studio 2015 Community. We tried a lot to create a WCF proxy in PCL based on online documentation and posts. But none of them works as is. Later, we tried a little bit other way, and it works.
Step By Step Description
1. Create a solution of Xamarin Form application with highest .NET version:
![Image 1](/KB/mobile/1106726/index.png)
2. Create an additional project of WCF application:
![Image 2](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
3. The Solution Explorer looks like this:
![Image 3](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Remarks: Build project WcfService1. Otherwise it cannot be referenced.
4. Try to add the WebService1 into PCL as service reference:
![Image 4](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
You see, there is no menu item Service Reference… beneath the menu item Reference…. This is the key point of this post - get the menu item Service Reference… appearing.
All we need to do is setup Profile 78 on PCL. Following approach makes the tricky:
5. Temporally disable the NuGet package by means of changing the package name like following example: Change packages.config to packages.config.BAK:
![Image 5](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Without this approach, the project settings change to Profile 78 might not be allowed.
6. Now right click the PCL project to open Properties:
![Image 6](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
7. Click button Change… to open the dialogbox Change Targets:
Change to settings showing above then click button OK. Change packages.config.BAK back to packages.config.
![Image 7](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
8. Now repeat to try to add the WCF proxy, the menu item “Service Reference…” should appear:
![Image 8](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Click the menu item Service Reference…, dialogbox Add Service Reference will appear. See the next item:
9. Clicking button Discover, it find the Service1 just created:
![Image 9](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Click button OK.
10. The WCF proxy is created as ServiceReference1:
![Image 10](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
11. To test the proxy, create a method callWCF()
in root file App.cs and revoke from inside the contractor in an asynchronously manner:
public App()
{
…
callWCF();
}
private void callWCF()
{
var wcf = new ServiceReference2.Service1Client();
wcf.GetDataCompleted += Wcf_GetDataCompleted;
wcf.GetDataAsync(123456);
}
private void Wcf_GetDataCompleted(object sender, ServiceReference2.GetDataCompletedEventArgs e)
{
string str = e.Result;
throw new NotImplementedException();
}
By this case, the retrieved value from WCF should be “You entered: 123456” at point e.Result.
12. Note: The WebService method GetData()
is as attached as following:
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
Points of Interest
The trick here to realize Profile 78 could be an exited approach to resolve WCF sonsuming issue.
We are software development / research firm. Be composed of crazy and energy full dream chasers, we focus on tomorrow software technique, to achieve from impossible to possible.