Welcome to MSDN Blogs Sign in | Join | Help

Vista Beta 2 to Jun CTP Breaking Changes

The breaking changes for the June CTP have now been posted. Raw API changes are here. This is pretty significant because you won't see very many changes after these ones.

Here are the changes you are most likely to encounter when porting your apps

Base addresses are now supported in config for self-hosted services.

Before

<configuration>
  <appSettings>
    <add key="baseAddress"
             value="http://localhost:8000/ServiceModelSamples/service" />
  </appSettings>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService">
        <endpoint address=""
                        binding="wsHttpBinding"
                        contract="Microsoft.ServiceModel.Samples.ICalculator" />
       </service>
    </services>
  </system.serviceModel>
</configuration>

//Code to create ServiceHost
Uri uri = new Uri(ConfigurationManager.AppSettings["baseAddress"]);
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), uri);


After

<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/>
          </baseAddresses>
        </host>
        <endpoint address=""
                        binding="wsHttpBinding"
                        contract="Microsoft.ServiceModel.Samples.ICalculator" />
       </service>
    </services>
  </system.serviceModel>
</configuration>

//Code to create ServiceHost
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));

Configuration of behaviors has changed:

Behaviors are now scoped by service or by endpoint under system.serviceModel/behaviors/serviceBehaviors and system.serviceModel/behaviors/endpointBehaviors respectively.  Further, the system.serviceModel/behaviors/behavior/@returnUnknownExceptionsAsFaults has been replaced with system.serviceModel/behaviors/serviceBehaviors/serviceDebug/@includeExceptionDetailInFaults.  This attribute controls whether exception detail is included in a fault that occurs when a service encounters an unhandled exception.

Before

<behaviors>
  <behavior name="MyServiceAndEndpointBehavior"
                  returnUnknownExceptionsAsFaults="false">
     <!-- behavior elements can implement IServiceBehavior or IEndpointBehavior-->
  </behavior>
</behaviors>


After

<behaviors>
    <serviceBehaviors>
        <behavior name="MyServiceBehavior">
            <serviceDebug includeExceptionDetailInFaults="false" />
            <!-- all behavior elements implement IServiceBehavior -->
        </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
        <behavior name="MyEndpointBehavior">
            <!-- all behavior elements implement IEndpointBehavior -->
        </behavior>
    </endpointBehaviors>
 </behaviors>

Metadata is now off by default so for a service to expose metadata, the ServiceMetadataBehavior must be configured on the service. When this behavior is present, you can publish metadata by configuring an endpoint to expose the IMetadataExchange contract.  The following configuration exposes a mex endpoint at http://localhost/servicemodelsamples/service.svc/mex and also enables wsdl requests over HTTP GET at http://localhost/servicemodelsamples/service.svc?wsdl.

<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
                    behaviorConfiguration="CalculatorServiceBehavior">
        <endpoint address=""
                         binding="wsHttpBinding"
                         contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <endpoint address="mex"
                        binding="mexHttpBinding"
                        contract="IMetadataExchange" />
      </service>
    </services>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

For client code updates, you should rerun svcutil.
Feel free to contact me, or ask questions on the WCF forum.

 

Published Friday, July 07, 2006 10:16 PM by edpinto

Comments

No Comments
Anonymous comments are disabled
 
Page view tracker