TPG
TPG

Reputation: 3209

Xamarin.Forms Add Connected Service on WCF only generated async method

I just begun to do Xamarin.Forms with .Net Standard 2.0 (PCL) project. I'm trying to consume my WCF web service but never got it successfully done.

I have created a simple WCF as below

[ServiceContract]
public interface IWcfConnection
{        
    [OperationContract]
    string GetHelloWorld();
}

the implementation as below

public class WcfConnection : IWcfConnection
{
    public string GetHelloWorld()
    {
        return "Hello World";
    }
}

It's a very simple WCF, when I go to my Xamarin.Forms and right click on the "Connected Service", there is no "Add Web Service", but only "Add Connected Service", so I selected that as below

enter image description here

Then select "Microsoft WCF Web Service Service Provider"

enter image description here

Select the option as below (I untick everything because if I add more than 1 service, it will crash)

enter image description here

When I look into the reference.cs created, there is only async method created.

public System.Threading.Tasks.Task<string> GetHelloWorldAsync()
{
    return base.Channel.GetHelloWorldAsync();
}

1) May I know why only async is created? Is it for .net standard and core, only async services will be created? As I read somewhere.

2) If so, how do I consume the web service?

In my xaml.cs file, I did the following,

WcfConnectionService.WcfConnectionClient client = new WcfConnectionService.WcfConnectionClient(new WcfConnectionService.WcfConnectionClient.EndpointConfiguration());

string abc = client.GetHelloWorldAsync().GetAwaiter().GetResult();

But I'm getting error and unable to work accordingly. Anybody got any idea?

Unhandled Exception:

System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Error in deserializing body of request message for operation 'GetHelloWorld'. OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name 'GetHelloWorld' and namespace 'http://tempuri.org/'. Found node type 'Element' with name 'GetHelloWorldAsync' and namespace 'http://tempuri.org/'

Upvotes: 2

Views: 1764

Answers (1)

ishakkulekci
ishakkulekci

Reputation: 871

At the moment Xamarin apps aren't compatible with the Task-based asynchronous WCF proxy methods that the WCF Web Service Reference connected service provider generates for .NET Standard projects (bugzilla.xamarin.com Bug 51959).

Generate an older compatible style of WCF proxy methods via checked "Generate Synchronous Operations" checkbox on Configure WCF Web Service Reference screen:

Generate Synchronous Operations

Consume the web service:

KimlikServiceReference.KPSPublicSoapClient soapClient = new KimlikServiceReference.KPSPublicSoapClient(KimlikServiceReference.KPSPublicSoapClient.EndpointConfiguration.KPSPublicSoap);
//KimlikServiceReference.TCKimlikNoDogrulaResponse response = soapClient.TCKimlikNoDogrulaAsync(TCKimlikNo, Ad, Soyad, DogumYili).Result;
bool result = soapClient.TCKimlikNoDogrula(TCKimlikNo, Ad, Soyad, DogumYili);

Upvotes: 1

Related Questions