Contact
Send mail to the author(s) Email Me

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Sign In
Navigation

Tag Cloud
.NET Framework (33) AJAX (9) ASP.NET (16) ASP.NET MVC (3) Azure (1) C# (35) Cloud (3) Database (7) Dev Community (2) Dev Tools (7) Enterprise Library (2) Extensions (1) Futures (2) General (6) IIS (1) Infrastructure (1) Javascript (7) LINQ (2) Mobile (1) MSDTC (6) Queuing (1) Quotes (5) SQL (5) Transactions (6) Visual Studio (3) WAS (2) WCF (24) WIF (1)

Archive
<March 2008>
SunMonTueWedThuFriSat
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

Categories

Blogroll
Home Feed your aggregator (RSS 2.0)
# Wednesday, March 26, 2008

I was looking for guidance on this topic, and came up with nothing. I'm sure people are doing this, but can't find any info. For anyone looking like I was, here's how to do it.

It's much simpler than I imagined, thanks to WCF. You can programmatically create your endpoint, binding, and channel inside your service. This would require that the address be hard-coded and require a recompile to change the address or binding. As long as your host's app.config or web.config has a client endpoint specifying the contract, you don't have to go through all that work. Your service is simply a client of another service, so your code looks just like that of a client of your service. Furthermore, changing the address or binding is as simple as changing config file values.

Service code:

    1 using System;

    2 using System.ServiceModel;

    3 using DataContracts;

    4 namespace ServiceImplementation

    5 {

    6     [ServiceContract]

    7     public interface IEmailService

    8     {

    9         [OperationContract]

   10         void Send(DataContracts.MailMessage msg);

   11     }

   12 

   13     public class EmailService : IEmailService

   14     {

   15         [OperationBehavior]

   16         public void Send(DataContracts.MailMessage msg)

   17         {

   18             // Open client proxy for legacy web service

   19             using (LegacyEmailServiceClient proxy =

   20                 new LegacyEmailServiceClient())

   21             {

   22                 proxy.SendEmail(msg.To,

   23                     msg.CC,

   24                     msg.Bcc,

   25                     msg.Body,

   26                     msg.Attachments);

   27             }

   28         }

   29     }

   30 }

   31 



Host's app.config:

    1 <?xml version="1.0" encoding="utf-8"?>

    2 <configuration>

    3   <system.serviceModel>

    4     <bindings>

    5       <basicHttpBinding>

    6         <binding name="BasicHttpBinding_Common">

    7           <security mode="None"/>

    8         </binding>

    9       </basicHttpBinding>

   10       <netTcpBinding>

   11         <binding name="NetTcpBinding_Common">

   12           <security mode="None"/>

   13         </binding>

   14       </netTcpBinding>

   15     </bindings>

   16     <client>

   17       <endpoint address="http://www.gotjeep.net/legacy/email.asmx"

   18           binding="basicHttpBinding"

   19                 bindingConfiguration="BasicHttpBinding_Common"

   20           contract="LegacyEmailServiceClient"

   21                 name="LegacyEmailServiceClient" />

   22     </client>

   23     <services>

   24       <service name="ServiceImplementation.EmailService"

   25               behaviorConfiguration="returnFaults">

   26         <host>

   27           <baseAddresses>

   28             <add baseAddress="http://localhost:8080/EmailService" />

   29             <add baseAddress="net.tcp://localhost:8088/EmailService" />

   30           </baseAddresses>

   31         </host>

   32         <endpoint name="NetTcpBinding_EmailService"

   33                   binding="netTcpBinding"

   34                   bindingConfiguration="NetTcpBinding_Common"

   35                   contract="ServiceImplementation.IEmailService"/>

   36         <endpoint name="BasicHttpBinding_EmailService"

   37                   binding="basicHttpBinding"

   38                   bindingConfiguration="BasicHttpBinding_Common"

   39                   contract="ServiceImplementation.IEmailService"/>

   40       </service>

   41     </services>

   42     <behaviors>

   43       <serviceBehaviors>

   44         <behavior name="returnFaults" >

   45           <serviceMetadata httpGetEnabled="true" />

   46         </behavior>

   47       </serviceBehaviors>

   48     </behaviors>

   49   </system.serviceModel>

   50 </configuration>

Wednesday, March 26, 2008 9:08:46 PM (Eastern Standard Time, UTC-05:00)  #    Comments [3]   .NET Framework | C# | WCF  | 
Copyright © 2010 Scott Klueppel. All rights reserved.