WCF Addressing In Depth Note

WCF Addressing In Depth

http://msdn.microsoft.com/en-us/magazine/cc163412.aspx

-Addressing Fundamentals
                                -Relative URIs (base address)
                                -Absolute URIs 
                -IIS AddressingConsiderations
                                -IIS control the base address
                                -Not only does IIS control the base address,it forces all of your endpoints to actually use the same base address(unlikeself-hosting). This means that if you do specify an absolute address for aparticular endpoint, it must start with the base address corresponding to thevirtual directory or you’ll get an exception. 
                                -Suppose you have a file named calc.svc and youplace it in a virtual directory that corresponds tohttp://localhost:8080/calcservice. The base address for this service will be http://localhost:8080/calcservice/calc.svc
                                                -If u have arelative address="secure" then absoluteaddress="http://localhost:8080/calcservice/calc.svc/secure"
                                                -If u have arelative address="mex" then absoluteaddress="http://localhost:8080/calcservice/calc.svc/mex"
                -Multiple Endpointsand Unique Addresses
                                -When exposing multiple endpoints withdifferent bindings, each endpoint address must be unique. This is because each endpointrequires a different transport listener and channel stack. 
                                                -e.g.:
                                                <services>
                                                  <servicename=”CalculatorService”>
                                                               <endpointaddress=”http://localhost:8080/calcservice”
                                                                                                 binding=”basicHttpBinding”
                                                                                                 contract=”ISimpleMath”/>
                                                               <endpointaddress=”http://localhost:8080/calcservice/secure”
                                                                                                 binding=”wsHttpBinding”
                                                                                                 contract=”ISimpleMath”/>
                                -Multiple endpoints share the same binding, youcan use the same addressacross those endpoints. 
                                                -e.g.:
                                                <services>
                                                  <servicename=”CalculatorService”>
                                                               <endpointaddress=”http://localhost:8080/calcservice”
                                                                                                 binding=”wsHttpBinding”
                                                                                                 contract=”ISimpleMath”/>
                                                               <endpointaddress=”http://localhost:8080/calcservice”
                                                                                                 binding=”wsHttpBinding”
                                                                                                 contract=”IScientific”/>
                -Logical vs. PhysicalAddresses

-When defining an endpoint for a WCF service, the "address" attribute (in case of defining it in a configuration file) is the logical address. The logical address corrsponds to the "To" header defined in WS-Addressing. Default WCF uses the same address as the physical address, but the physical address can be set individually in the "listenUri" attribute. The physical address corrsponds to the "Via" header defined in WS-Addressing. The logical address is important when WCF should dispatch the incoming message, because default it requires an exact match between the "To" header in the message and the "address" attribute. 
                                -Windows Communication Foundation refers to thelogical address as "Address" or "Endpoint Address" and the physical address as "ListenUri".
                                -When you specify endpoint addresses like I’vedone thus far, you’re actually supplying the logical address. However, thelogical address is also used as the physical address unless otherwisespecified. 
                                -Physical Address can accomplish in configurationusing thelistenUri attribute
                                                <services>
                                                  <servicename=”CalculatorService”>
                                                               <endpointaddress=”urn:calcservice:simplemath”
                                                                                                 listenUri=”http://localhost:8080/calcservice” 
                                                                                                 binding=”wsHttpBinding”
                                                                                                 contract=”ISimpleMath”/>
                                                               <endpointaddress=”urn:calcservice:scientific”
                                                                                                 listenUri=”http://localhost:8080/calcservice” 
                                                                                                 binding=”wsHttpBinding”
                                                                                                 contract=”IScientific”/>
                -Addressing Headers
                                -In order to accommodate even moresophisticated routing and dispatching logic, you may want to annotate SOAP messages withcustom addressing headers.
                                -e.g.:
                                                -<services>
                                                                 <servicename=”CalculatorService” 
                                                                                                 behaviorConfiguration=”metadata”>
                                                                               <host>
                                                                                 <baseAddresses>
                                                                                               <addbaseAddress=”http://localhost:8080/calcservice”/>
                                                                                 </baseAddresses>
                                                                               </host>
                                                                               <endpointbinding=”wsHttpBinding” contract=”ISimpleMath”>
                                                                                 <headers>
                                                                                               <basicxmlns=”http://example.org/level”/>
                                                                                 </headers>
                                                                               </endpoint>
                                                                               <endpointbinding=”wsHttpBinding” contract=”IScientific”>
                                                                                 <headers>
                                                                                               <premiumxmlns=”http://example.org/level”/>
                                                                                 </headers>
                                                                               </endpoint>
                                                                 </service>
                -Message Filters
                                -Each endpoint actually has two filters associatedwith it—anaddress filter and a contract filter. The address filter determinesif the incoming message matches the endpoint’s "To" address and any required address headers, while the contract filter determines whether it matches the endpoint’s contract. Both filters are used by the dispatcher todetermine the destination endpoint.
                                -An easy way to change the message filter used bya service is through the AddressFilterMode property of [ServiceBehavior].AddressFilterMode comes with three values:Any, Exact, and Prefix.
                                e.g:
                                                -[ServiceBehavior(AddressFilterMode=AddressFilterMode.Prefix)]
                                                               public classCalculatorService : ISimpleMath, IScientific
                                                               {
                                -Windows Communication Foundation does come withanXPathMessageFilter, which allows you to evaluate arbitrary XPath expressionsagainst incoming messages during the matching process, single-handedly coveringcontent-driven scenarios.
                -Host NameComparisons
                                -Issue: if you want to configure the endpoint tolisten for all host names bound to a particular machine (localhost, contoso,www.contoso.com, and so on)
                                -You can further control this via theHostNameComparisonMode, which is made available on most bindings as a property.HostNameComparisonMode comes with three settings: StrongWildcard (the default),Exact, and WeakWildcard.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值