Mono for Android's secure WCF services

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Mono for Android's secure WCF services

mattleibow
Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew
Reply | Threaded
Open this post in threaded view
|

Mono for Android's secure WCF services

mattleibow
Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
Reply | Threaded
Open this post in threaded view
|

Re: Mono for Android's secure WCF services

Wally McClure
Matt,
 
If you are using WCF and having problems, what about setting the services to be REST based?  After experimentation, I am going to REST, JSON, and, if you need security what about https?  Or, have I missed something somewhere on a list about this being bad?  Smile
 
Wally
 
PS. I read about JSON support for .NET 4 via NuGet, but have no experience with it.

Date: Wed, 9 May 2012 09:14:04 +0200
From: [hidden email]
To: [hidden email]
Subject: [mono-android] Mono for Android's secure WCF services

Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
Reply | Threaded
Open this post in threaded view
|

Re: Mono for Android's secure WCF services

ledz
I second that. I've been using WCF REST services, with JSON formatting and https endpoints, and so far, the overall experience is great.


On 9 May 2012 14:11, Wally McClure <[hidden email]> wrote:
Matt,
 
If you are using WCF and having problems, what about setting the services to be REST based?  After experimentation, I am going to REST, JSON, and, if you need security what about https?  Or, have I missed something somewhere on a list about this being bad?  Smile
 
Wally
 
PS. I read about JSON support for .NET 4 via NuGet, but have no experience with it.

Date: Wed, 9 May 2012 09:14:04 +0200
From: [hidden email]
To: [hidden email]
Subject: [mono-android] Mono for Android's secure WCF services


Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid




--
Gonçalo Oliveira

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
Reply | Threaded
Open this post in threaded view
|

Re: Mono for Android's secure WCF services

Wally McClure
One of the things I am liking about REST is a the ability to get away from the proxy.  There are a lot of reasons why a proxy is a good thing in development, however, the proxy is a hassle in the iPhone/MonoTouch world.  If I could get a REST proxy in the dev world that somehow turned itself off when it was deployed to an emulator/simulator or device, that would be awesome, but i don't see that happening any time soon.
 
Wally
 

Date: Wed, 9 May 2012 14:17:24 +0100
From: [hidden email]
To: [hidden email]
Subject: Re: [mono-android] Mono for Android's secure WCF services

I second that. I've been using WCF REST services, with JSON formatting and https endpoints, and so far, the overall experience is great.


On 9 May 2012 14:11, Wally McClure <[hidden email]> wrote:
Matt,
 
If you are using WCF and having problems, what about setting the services to be REST based?  After experimentation, I am going to REST, JSON, and, if you need security what about https?  Or, have I missed something somewhere on a list about this being bad?  Smile
 
Wally
 
PS. I read about JSON support for .NET 4 via NuGet, but have no experience with it.

Date: Wed, 9 May 2012 09:14:04 +0200
From: [hidden email]
To: [hidden email]
Subject: [mono-android] Mono for Android's secure WCF services


Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid




--
Gonçalo Oliveira

_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
Reply | Threaded
Open this post in threaded view
|

Re: Mono for Android's secure WCF services

mattleibow
I have been implementing a REST endpoint now and it seems to be quite smooth going. I think this is what I'll be doing.
I thought it was going to be harder, but it is pretty clean and neat.

On Wed, May 9, 2012 at 3:27 PM, Wally McClure <[hidden email]> wrote:
One of the things I am liking about REST is a the ability to get away from the proxy.  There are a lot of reasons why a proxy is a good thing in development, however, the proxy is a hassle in the iPhone/MonoTouch world.  If I could get a REST proxy in the dev world that somehow turned itself off when it was deployed to an emulator/simulator or device, that would be awesome, but i don't see that happening any time soon.
 
Wally
 

Date: Wed, 9 May 2012 14:17:24 +0100
From: [hidden email]
To: [hidden email]
Subject: Re: [mono-android] Mono for Android's secure WCF services


I second that. I've been using WCF REST services, with JSON formatting and https endpoints, and so far, the overall experience is great.


On 9 May 2012 14:11, Wally McClure <[hidden email]> wrote:
Matt,
 
If you are using WCF and having problems, what about setting the services to be REST based?  After experimentation, I am going to REST, JSON, and, if you need security what about https?  Or, have I missed something somewhere on a list about this being bad?  Smile
 
Wally
 
PS. I read about JSON support for .NET 4 via NuGet, but have no experience with it.

Date: Wed, 9 May 2012 09:14:04 +0200
From: [hidden email]
To: [hidden email]
Subject: [mono-android] Mono for Android's secure WCF services


Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid




--
Gonçalo Oliveira

_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid



_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
Reply | Threaded
Open this post in threaded view
|

Re: Mono for Android's secure WCF services

Wally McClure
Matt,

I'd like to hear about your progress, issues that you run into, and anything that you feel would be good to share.  

Wally


Date: Wed, 9 May 2012 17:15:43 +0200
From: [hidden email]
To: [hidden email]
Subject: Re: [mono-android] Mono for Android's secure WCF services

I have been implementing a REST endpoint now and it seems to be quite smooth going. I think this is what I'll be doing.
I thought it was going to be harder, but it is pretty clean and neat.

On Wed, May 9, 2012 at 3:27 PM, Wally McClure <[hidden email]> wrote:
One of the things I am liking about REST is a the ability to get away from the proxy.  There are a lot of reasons why a proxy is a good thing in development, however, the proxy is a hassle in the iPhone/MonoTouch world.  If I could get a REST proxy in the dev world that somehow turned itself off when it was deployed to an emulator/simulator or device, that would be awesome, but i don't see that happening any time soon.
 
Wally
 

Date: Wed, 9 May 2012 14:17:24 +0100
From: [hidden email]
To: [hidden email]
Subject: Re: [mono-android] Mono for Android's secure WCF services


I second that. I've been using WCF REST services, with JSON formatting and https endpoints, and so far, the overall experience is great.


On 9 May 2012 14:11, Wally McClure <[hidden email]> wrote:
Matt,
 
If you are using WCF and having problems, what about setting the services to be REST based?  After experimentation, I am going to REST, JSON, and, if you need security what about https?  Or, have I missed something somewhere on a list about this being bad?  Smile
 
Wally
 
PS. I read about JSON support for .NET 4 via NuGet, but have no experience with it.

Date: Wed, 9 May 2012 09:14:04 +0200
From: [hidden email]
To: [hidden email]
Subject: [mono-android] Mono for Android's secure WCF services


Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid




--
Gonçalo Oliveira

_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid



_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
Reply | Threaded
Open this post in threaded view
|

Re: Mono for Android's secure WCF services

ledz
For the client implementation, there's a third party tool that simplifies the request handling, called RestSharp. Includes full source and MonoDroid and MonoTouch builds. Saves some time.

https://github.com/restsharp/RestSharp 

On 9 May 2012 16:25, Wally McClure <[hidden email]> wrote:
Matt,

I'd like to hear about your progress, issues that you run into, and anything that you feel would be good to share.  

Wally


Date: Wed, 9 May 2012 17:15:43 +0200
From: [hidden email]
To: [hidden email]

Subject: Re: [mono-android] Mono for Android's secure WCF services

I have been implementing a REST endpoint now and it seems to be quite smooth going. I think this is what I'll be doing.
I thought it was going to be harder, but it is pretty clean and neat.

On Wed, May 9, 2012 at 3:27 PM, Wally McClure <[hidden email]> wrote:
One of the things I am liking about REST is a the ability to get away from the proxy.  There are a lot of reasons why a proxy is a good thing in development, however, the proxy is a hassle in the iPhone/MonoTouch world.  If I could get a REST proxy in the dev world that somehow turned itself off when it was deployed to an emulator/simulator or device, that would be awesome, but i don't see that happening any time soon.
 
Wally
 

Date: Wed, 9 May 2012 14:17:24 +0100
From: [hidden email]
To: [hidden email]
Subject: Re: [mono-android] Mono for Android's secure WCF services


I second that. I've been using WCF REST services, with JSON formatting and https endpoints, and so far, the overall experience is great.


On 9 May 2012 14:11, Wally McClure <[hidden email]> wrote:
Matt,
 
If you are using WCF and having problems, what about setting the services to be REST based?  After experimentation, I am going to REST, JSON, and, if you need security what about https?  Or, have I missed something somewhere on a list about this being bad?  Smile
 
Wally
 
PS. I read about JSON support for .NET 4 via NuGet, but have no experience with it.

Date: Wed, 9 May 2012 09:14:04 +0200
From: [hidden email]
To: [hidden email]
Subject: [mono-android] Mono for Android's secure WCF services


Hi All,

What is the state of Mono for Android's secure WCF services? Is it up to SOAP 1.2 yet?
I am writing a Proof of Concept for an Android app that will interact with WCF services, but am struggling to get the thing working. It will be an enterprise app that will use WiFi and needs to be secure as it will be carrying the companies confidential data.

I did see you FAQ, but want to know for sure the current status: http://support.xamarin.com/customer/portal/articles/142151-does-mono-for-android-support-wcf- and this thread seems bad things about it: http://mono-for-android.1047100.n5.nabble.com/Calling-arbitrary-web-services-td4959774.html

I am trying to connect to a service that has `TransportWithMessageCredential` security. However I am getting an error on the server side:

MessageSecurityException:
Security processor was unable to find a security header in the message.
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.
This can occur if the service is configured for security and the client is not using security.

Server Config:

    <service name="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IngredientService"
             behaviorConfiguration="CredentialValidation">
        <endpoint address="/BasicHttp"
            binding="basicHttpBinding"
            bindingConfiguration="BDBasicHttpBindingWithSecurity"
            contract="BrandDirector.ApplicationServer.Core.Services.UI.Products.Specifications.IIngredientService" />
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>

    <behavior name="CredentialValidation">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <HttpStatusCode200Behavior />
      <serviceCredentials type="BrandDirector.ApplicationServer.Core.Security.Authentication.PasswordServiceCredentials, BrandDirector.ApplicationServer.Core.Security, Version=1.0.0.0, Culture=neutral">
        <userNameAuthentication userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="BrandDirector.ApplicationServer.Core.Security.CredentialValidator, BrandDirector.ApplicationServer.Core.Security" />
      </serviceCredentials>
    </behavior>

    <extensions>
      <behaviorExtensions>
        <add name="HttpStatusCode200Behavior" type="BrandDirector.ApplicationServer.Core.Services.Common.ServiceModel.HttpStatusCode200BehaviorExtension, BrandDirector.ApplicationServer.Core.Services.Common" />
      </behaviorExtensions>

      <basicHttpBinding>
        <binding name="BDBasicHttpBindingWithSecurity" messageEncoding="Text" maxReceivedMessageSize="655536">
          <security mode="TransportWithMessageCredential" >
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </extensions>


Client Code:

    public class Activity1 : Activity
    {
        private Button button;
        const string address = "https://.../IngredientService.svc/BasicHttp";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);


            var timeout = new TimeSpan(0, 1, 0);
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
            {
                MessageEncoding = WSMessageEncoding.Text,
                Security =
                {
                    Transport =
                    {
                        ClientCredentialType = HttpClientCredentialType.None,
                        ProxyCredentialType = HttpProxyCredentialType.None
                    },
                    Message =
                    {
                        ClientCredentialType = BasicHttpMessageCredentialType.UserName,
                    }
                },
                HostNameComparisonMode = HostNameComparisonMode.StrongWildcard,
                MaxReceivedMessageSize = 655536,
                ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas
                {
                    MaxArrayLength = 655536,
                    MaxStringContentLength = 655536,
                },
                SendTimeout = timeout,
                OpenTimeout = timeout,
                ReceiveTimeout = timeout,
            };

            System.Net.ServicePointManager.ServerCertificateValidationCallback += OnServerCertificateValidationCallback;

            SetContentView(Resource.Layout.Main);

            button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate
            {
                client = new IngredientServiceClient(binding, new EndpointAddress(address));
                var clientCredential = client.ClientCredentials.UserName;
                clientCredential.UserName = "admin";
                clientCredential.Password = "KDNSG7";

                client.BeginGetIngredients("e", callBack, null);
            };
        }

        IngredientServiceClient client;
       
        private void callBack(IAsyncResult ar)
        {
            var result = client.EndGetIngredients(ar);
           
            button.Text = result.First().Name;
        }
                       
        // Ignore and certificate errors
        private bool OnServerCertificateValidationCallback(object sender, X509Certificate certificate,

                                                           X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
    }

This code works fine in WPF, the result is returned and all is well. I do see from older threads and the FAQ that the WCF is still early in the development cycle, but I just want to check if maybe I am doing something wrong first.

In Anticipation,
Matthew


_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid




--
Gonçalo Oliveira

_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid



_______________________________________________ Monodroid mailing list [hidden email] UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid




--
Gonçalo Oliveira

_______________________________________________
Monodroid mailing list
[hidden email]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid