Magazine

[Silverlight] Passer de https à http pour vos test WCF

Publié le 26 mars 2009 par Jeremy.jeanson

En utilisant conjointement SilverLight et WCF, il est très pratique d’utiliser le générateur de proxy fourni dans Visual Studio. Oui mais voilà, si on change le Binding côté service, il faut aussi le faire côté proxy. Et donc changer continuellement les fichiers de configuration. Côté serveur généralement cela ne pose pas de souci car on prend vite l’habitude d’avoir un fichier de configuration de production et un second de test pour Visual Studio. Ce qui donne souvent un code de ce genre. (2 endpoint sur 2 url et donc 2 bindings différents)

<system.serviceModel>
    <bindings >
      <basicHttpBinding >
        <binding name="BindingHttps">
          <security mode="Transport"/>
        </binding>
      </basicHttpBinding>
    </bindings>
		<behaviors>
			<serviceBehaviors>
				<behavior name="TestSilverlight.Web.MonServiceBehavior">
					<serviceMetadata httpGetEnabled="true"/>
					<serviceDebug includeExceptionDetailInFaults="false"/>
				</behavior>
			</serviceBehaviors>
		</behaviors>
		<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
		<services>
			<service behaviorConfiguration="TestSilverlight.Web.MonServiceBehavior" name="TestSilverlight.Web.MonService">
				<endpoint name="http" binding="basicHttpBinding" contract="TestSilverlight.Web.MonService"
                  address="http://localhost:50000/MonService.svc" />
        <endpoint name="https" binding="basicHttpBinding"  contract="TestSilverlight.Web.MonService"
                  address="https//www.mondomainedeproduction.com/MonService.svc" 
                  bindingName="BindingHttps" />
				<!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>-->
			</service>
		</services>
	</system.serviceModel>

Oui mai côté client,… et bien il suffit de faire l’instanciation du proxy et donc du binding via le code ;)

En gros voici l’astuce : on fait un petit test sur 'l’uri mettant à disposition notre application SilverLight.

Vb

Imports System
Imports System.ServiceModel
Imports System.ServiceModel.Channels

Public Class MonService

    Public Shared Property Instance As TestSilverlight.MonProxy.MonServiceClient
        Get
			' Recherche de l'uri du service
            Dim uri As String = System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri _
                    .Substring(0, System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri.LastIndexOf("/") + 1)

            Dim binding As new BasicHttpBinding()

            If uri.Contains("https://") Then
                binding.Security.Mode = BasicHttpSecurityMode.Transport
            End If

            return new TestSilverlight.MonProxy.MonServiceClient( _
                binding, _
                new EndpointAddress( _
                	String.Concat( _
                		uri, _
                		"MonService.svc")))
        End Get
    End Property

End Class

C#

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

public static class MonService
{
    public static TestSilverlight.MonProxy.MonServiceClient Instance
    {
        get
        {
            // Recherche de l'uri du service
            String uri = System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri
            	.Substring(0, System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri.LastIndexOf('/') + 1);

            BasicHttpBinding binding = new BasicHttpBinding();
            if (uri.Contains("https://"))
            {
            	binding.Security.Mode = BasicHttpSecurityMode.Transport;
            }
            BasicHttpBinding binding = new BasicHttpBinding();

            if (System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri.Contains("https://"))
            {
                binding.Security.Mode = BasicHttpSecurityMode.Transport;
            }

            return new TestSilverlight.MonProxy.MonServiceClient(
                binding,
                new EndpointAddress(
                	String.Concat(
                		uri,
                		"MonService.svc"))
                );
        }
    }
}

Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog