Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Mobile

Xamarin Form Consuming WCF

3.76/5 (12 votes)
15 Jun 2016CPOL2 min read 40.7K  
An absolute trick to consume WCF WebService at Xamarin Form PCL root

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

2. Create an additional project of WCF application:

Image 2

3. The Solution Explorer looks like this:

Image 3
Remarks: Build project WcfService1. Otherwise it cannot be referenced.

4. Try to add the WebService1 into PCL as service reference:

Image 4
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
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

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

8. Now repeat to try to add the WCF proxy, the menu item “Service Reference…” should appear:

Image 8
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
Click button OK.

10. The WCF proxy is created as ServiceReference1:

Image 10

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; // Receive feedback asynchronously
    wcf.GetDataAsync(123456); // Send request asynchronously
}

private void Wcf_GetDataCompleted(object sender, ServiceReference2.GetDataCompletedEventArgs e)
{
    string str = e.Result; // This value should be: "You entered: 123456"
    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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)