| <?xml version="1.0" encoding="utf-8"?> |
| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| |
| <section> |
| <title> |
| WCF |
| </title> |
| <section role="h1" id="WCF-Introduction"> |
| <title> |
| Introduction |
| </title> |
| |
| <para> |
| WCF (<emphasis>Windows Communication Foundation)</emphasis> unifies the .Net |
| communication capabilities into a single, common, general Web |
| service oriented framework. A good WCF tutorial can be found |
| <ulink url="http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2#WCFSilverlightIntroduction">here</ulink>. |
| </para> |
| <para> |
| WCF separates how service logic is written from how services |
| communicate with clients. Bindings are used to specify the |
| transport, encoding, and protocol details required for clients |
| and services to communicate with each other. Qpid provide a WCF |
| binding: org.apache.qpid.wcf.model.QpidBinding. WCF Services that |
| use the Qpid binding communicate through queues that are |
| dynamically created on a Qpid broker. |
| </para> |
| <!--h1--> |
| </section> |
| <section role="h1" id="WCF-HowtouseQpidbinding"> |
| <title> |
| How to use Qpid binding |
| </title> |
| |
| <para> |
| WCF services are implemented using: |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para>A service contract with one or more operation contracts. |
| </para> |
| </listitem> |
| <listitem> |
| <para>A service implementation for those contracts. |
| </para> |
| </listitem> |
| <listitem> |
| <para>A configuration file to provide that implementation with an |
| endpoint and a binding for that specific contract. |
| </para> |
| </listitem> |
| </itemizedlist> |
| <para> |
| The following configuration file can be used to configure a Hello |
| Service: |
| </para> |
| <programlisting> |
| <configuration> |
| <system.serviceModel> |
| <services> |
| <!-- the service class --> |
| <service name="org.apache.qpid.wcf.demo.HelloService"> |
| <host> |
| <baseAddresses> |
| <!-- Use SOAP over AMQP --> |
| <add baseAddress="soap.amqp:///" /> |
| </baseAddresses> |
| </host> |
| |
| <endpoint |
| address="Hello" |
| <!-- We use a Qpid Binding, see below def --> |
| binding="customBinding" |
| bindingConfiguration="QpidBinding" |
| <!-- The service contract --> |
| contract="org.apache.qpid.wcf.demo.IHelloContract"/> |
| </service> |
| </services> |
| |
| <bindings> |
| <customBinding> |
| <!-- cf def of the qpid binding --> |
| <binding name="QpidBinding"> |
| <textMessageEncoding /> |
| <!-- specify the host and port number of the broker --> |
| <QpidTransport |
| host="192.168.1.14" |
| port="5673" /> |
| </binding> |
| </customBinding> |
| </bindings> |
| |
| <extensions> |
| <bindingElementExtensions> |
| <!-- use Qpid binding element: org.apache.qpid.wcf.model.QpidTransportElement --> |
| <add |
| name="QpidTransport" |
| type="org.apache.qpid.wcf.model.QpidTransportElement, qpidWCFModel"/> |
| </bindingElementExtensions> |
| </extensions> |
| |
| </system.serviceModel> |
| </configuration> |
| </programlisting> |
| <para> |
| Endpoints and bindings can also be set within the service code: |
| </para> |
| <programlisting> |
| /* set HostName, portNumber and MyService accordingly */ |
| Binding binding = new QpidBinding("HostName", portNumber); |
| ServiceHost service = new ServiceHost(typeof(MyService), new Uri("soap.amqp:///")); |
| service.AddServiceEndpoint(typeof(IBooking), binding, "MyService"); |
| service.Open(); |
| .... |
| </programlisting> |
| <!--h1--> |
| </section> |
| </section> |