![Page 1: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/1.jpg)
1
Välkommen till Sommarkollo
2006Windows Communication
Foudnation
2006
![Page 2: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/2.jpg)
Windows Communication FoundationJohan Lindfors
![Page 3: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/3.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 4: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/4.jpg)
Hur ser det ut idag?
Remoting
ASMX / WSE
DCOM
System.Messaging
Enterprise Services
Microsoft
Sockets
RMI
JAX-RPC
CORBA
JMS
EJB
J2EE
Sockets
![Page 5: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/5.jpg)
WCF byggstenar Förenar teknikerna för distribuerad
kommunikation ”On-machine”, ”Cross-machine”,
”Cross-Internet”
Brett stöd för WS-* specifikationerna Kompatibelt med existerande
tekniker från Microsoft
Förenklar utvecklingen av löst kopplade tjänster
Konfigurationsbaserad kommunikation
Enhetlig
Interoperabilitet
Tjänsteorienterat
![Page 6: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/6.jpg)
En samlingsklass för olika typer
Lagra instanser i strukturen
Hämta instanser
public class Stack{ object[] items; public void Push(object item){…} public object Pop(){…}}
Lite om generiska klasser
Stack stack = new Stack();int i;string s = null;stack.Push(i);stack.Push(s); // Inkonsekvens i typer!
string s = (string)stack.Pop(); //Paying for cast
![Page 7: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/7.jpg)
Hur kul är det här egentligen?public class IntegerStack{ int[] items; public void Push(int item){…} public int Pop(){…}}
Utan generiska klasser
public class StringStack{ string[] items; public void Push(string item){…} public string Pop(){…}}
![Page 8: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/8.jpg)
Mallen
Användningen
public class Stack<T> //T är generisk typparameter{ T[] items; public void Push(T item){…} public T Pop(){…}}
Med generiska klasser
Stack<int> integerStack = new Stack<int>(); integerStack.Push(1);
Stack<string> stringStack = new Stack<string>();stringStack.Push(“Hello, World!”);
![Page 9: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/9.jpg)
Flera typer vid definition
Använda aliaser
Begränsningar
public class Point<X,Y>{…}
Point<int,int> point = null;
Detaljer…
using IntegerPoint = Point<int,int>;IntegerPoint point = null;
public class Stack<T> where T: IComparable
public class Node<T> where T: new() { private T item = new T();}
![Page 10: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/10.jpg)
Kan bara konvertera typparametrar till ”interface”
Ärva från en generisk klass
class MyClass<T>{ void SomeMethod(T t) { ISomeInterface something = (ISomeInterface)t; SomeClass somethingElse = (SomeClass)t; //Error! }}
Mer detaljer…
public BaseClass<T>{…}
public ChildClass: BaseClass<string> {…}
![Page 11: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/11.jpg)
Generiska metoderpublic class MyClass{ public void MyMethod<T>(T t) { … }}
MyClass instance = new MyClass();instance.MyMethod(3);instance.MyMethod(“Hello, World”);
Mer detaljer…
![Page 12: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/12.jpg)
Klient Tjänst
Klienter och tjänster
![Page 13: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/13.jpg)
Klient Tjänst
“Endpoints”
EndpointEndpoint
Endpoint
Endpoint
Endpoints exponerar funktionalitet
![Page 14: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/14.jpg)
Klient Tjänst
Adress, Bindning, Kontrakt
ABC
CBA
CBA
CBA
Endpoints exponerar funktionalitet Adress beskriver VART! Bindning beskriver HUR! Kontrakt beskriver VAD!
![Page 15: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/15.jpg)
WSDLKlient Tjänst
Metadata
ABC
CBA
CBA
CBA
Endpoints exponerar funktionalitet Adress beskriver VART! Bindning beskriver HUR! Kontrakt beskriver VAD!
WSDL beskriver ”endpoints”
![Page 16: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/16.jpg)
WSDLKlient Tjänst
Uppträdanden
Uppträdanden beskriver exempelvis Instansiering och aktivering Sessionshantering Transaktioner
ABC
CBA
CBA
CBAU UU
![Page 17: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/17.jpg)
[ServiceContract]public interface IHello{ [OperationContract] string Hello(string name);}
Definition av kontrakt och tjänst
public class HelloService : IHello{ public string Hello(string name) { return "Hello, " + name; }}
Kontrakt
Implementation
![Page 18: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/18.jpg)
I en egen applikation
IIS/WAS (http://localhost/HelloService/HelloService.svc)
class HelloHost{ static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(HelloService)); host.Open(); // Wait until done accepting connections Console.ReadLine(); host.Close(); }}
Hostning av tjänsten
<%@ ServiceHost Language=“C#” Service=“HelloService” %>
![Page 19: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/19.jpg)
Konfiguration<?xml version="1.0" encoding="utf-8" ?><configuration> <system.serviceModel> <services> <service name="HelloService"> <endpoint address="http://localhost/HelloService" binding="basicHttpBinding" contract="IHello" /> </service> </services> </system.serviceModel></configuration>
![Page 20: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/20.jpg)
Kod
Konfiguration
static void Main() { IHello proxy = new ChannelFactory<IHello> ("HelloEndpoint").CreateChannel(); string r = proxy.Hello("Beat"); Console.WriteLine(r);}
Implementera klienten
<system.serviceModel> <client> <endpoint name="HelloEndpoint" address="http://localhost/HelloService" binding="basicHttpBinding" contract="IHello" /> </client></system.serviceModel>
![Page 21: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/21.jpg)
Arkitektur för dagen
Store
ASP.NETWebApplication
StoreService
AdminService
AdminClient
WindowsApplication
AdminServiceCallback
StoreClient
WindowsApplication
Shipments
WindowsApplication
ShipmentService
Customers
ASP.NETWebApplicationCustomerService
Orders
ASP.NETWebApplication OrderService
Inventory
ASP.NETWebApplication
InventoryServiceWS
![Page 22: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/22.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 23: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/23.jpg)
Kontrakt Strukturella – ”Structural”
[DataContract] [MessageContract]
Agerande – ”Behavioral” [ServiceContract] [OperationContract] [FaultContract]
![Page 24: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/24.jpg)
Oberoende av OO-åtkomstnivåer
[DataContract]
using System.Runtime.Serialization;
[DataContract(Name="PersonType")]public class Person {
[DataMember]public string name;
[DataMember(Name="AgeProperty")]private int age;
[DataMember]float salary;
int positionCode;}
![Page 25: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/25.jpg)
Hantering av samlingar
[DataContract]
[DataContract]public class LibraryCatalog{ [DataMember] System.Collections.Hashtable catalog;}
![Page 26: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/26.jpg)
Använda [KnownType]-attributet
[DataContract]
[DataContract][KnownType(typeof(Book))][KnownType(typeof(Magazine))]public class LibraryCatalog{
[DataMember]System.Collections.Hashtable catalog;
}
[DataContract]public class Book{…}[DataContract]public class Magazine{…}
![Page 27: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/27.jpg)
Vid osäkerhet av datatyper
[DataContract]
[DataContract][KnownType(typeof(Book))][KnownType(typeof(Magazine))]public class PublishedItem{
[DataMember]object catalog;[DataMember]DateTime publicationDate;
}
[DataContract]public class Book{…}[DataContract]public class Magazine{…}
![Page 28: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/28.jpg)
Versionshantering
[DataContract]
[DataContract]public class Car{ [DataMember(IsRequired = true)] public string Model; [DataMember(IsRequired = false)] //default public int HorsePower;}
![Page 29: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/29.jpg)
För skräddarsydda ”SOAP-headers” Vilket inte rekommenderas
[MessageContract]
[DataContract]public class PurchaseOrder {...}
[MessageContract]public class PurchaseOrderMessage{ [MessageHeader] public int Number; [MessageBody(Order = 1)] public PurchaseOrder Order;}
![Page 30: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/30.jpg)
Kontrollerar hur strukturella kontrakt serialiseras
[ServiceContract]
[ServiceContract][DataContractFormat( Style=OperationFormatStyle.Document)] //Or Rpcpublic interface IOrderEntry {...}
[ServiceContract][XmlSerializerFormat( Style=OperationFormatStyle.Document, Use=OperationFormatUse.Literal)] //Or Encodedpublic interface IOrderEntry {...}
![Page 31: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/31.jpg)
Duplex
[ServiceContract]
[ServiceContract(Session = true, CallbackContract = typeof(IOrderEntryCallback))]public interface IOrderEntry{ [OperationContract(IsOneWay = true)] void PlaceOrder(PurchaseOrder order);}
[ServiceContract]public interface IOrderEntryCallback{ [OperationContract(IsOneWay = true)] void PlaceOrderCompleted( PurchaseOrderStatus orderStatus);}
![Page 32: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/32.jpg)
Implementation En implementation av ett interface Klassen kallas då ”Service Type”
[ServiceContract]
[ServiceContract]public interface IOrderEntry { [OperationContract(IsOneWay = true)] void PlaceOrder(PurchaseOrder order);}
internal class OrderEntryService : IOrderEntry{ void IOrderEntry.PlaceOrder(PurchaseOrder order) { //Your code goes here }}
![Page 33: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/33.jpg)
Exponera metoder
Egenskapen ”Action”
[ServiceContract]public interface IOrderEntry{ [OperationContract(IsOneWay = true)] void PlaceOrder(PurchaseOrder order);}
[OperationContract]
[ServiceContract]public interface IOrderEntry{[OperationContract( Action="http://contoso.com/GetOrder", ReplyAction="http://contoso.com/GetOrderReply")] PurchaseOrder GetOrder(String orderIdentifier);}
![Page 34: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/34.jpg)
Rekommendation Använd Action=”*” som en generell
funktion
[OperationContract]
[ServiceContract]public interface MyContract { [OperationContract(IsOneWay = true, Action="urn:crud:insert")] void ProcessInsertMessage(Message message); [OperationContract(IsOneWay = true, Action="urn:crud:update")] void ProcessUpdateMessage(Message message); [OperationContract(IsOneWay = true, Action="urn:crud:delete")] void ProcessDeleteMessage(Message message); [OperationContract(IsOneWay = true, Action="*")] void ProcessUnrecognizedMessage(Message message); }
![Page 35: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/35.jpg)
Synkront
Asynkront
[ServiceContract]public interface IMath{ [OperationContract] int Add(int I, int j);}
[OperationContract]
[ServiceContract]public interface IMath{ [OperationContract(AsyncPattern = true)] IAsyncResult BeginAdd( int i, int j, AsyncCallback cb, object o); int EndAdd(IAsyncResult result);}
![Page 36: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/36.jpg)
[FaultContract][DataContract]class MyFault { [DataMember] public string Reason = null;}[ServiceContract]public interface IOrderEntry { [OperationContract] [FaultContract(typeof(MyFault))] PurchaseOrder GetOrder(String orderId); }public class OrderEntry: IOrderEntry { public PurchaseOrder GetOrder(string orderId) { try{…}
catch(Exception exception) { MyFault theFault = new MyFault(); theFault.Reason = “Some Reason”; throw new FaultException<MyFault>(theFault); }
}}
![Page 37: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/37.jpg)
På klienten[DataContract(Name="MyFault")]public class ClientFault{
[DataMember]string Reason = null;
}
...
try { PurchaseOrder order = Service.GetOrder(orderId);}catch (FaultException<ClientFault> clientFault) { Console.WriteLine(clientFault.Detail.Reason);}
[FaultContract]
![Page 38: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/38.jpg)
Kod först
Kontrakt först
[ServiceContract]public class OrderEntry { [OperationContract(IsOneWay = true)] public void PlaceOrder(PurchaseOrder order) { return; }}
Programmera kontrakt
[ServiceContract]public interface IOrderEntry { [OperationContract(IsOneWay = true)] void PlaceOrder(PurchaseOrder order);}public class OrderEntry : IOrderEntry { public void PlaceOrder(PurchaseOrder order) { return; }}
![Page 39: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/39.jpg)
WCF och WSDL WSDL kontrakt genereras i flera filer
Använder <wsdl:import.../> Scheman separeras alltid från tjänsten
<wsdl:definitions> <wsdl:portType.../>
<wsdl:binding.../>
<wsdl:service.../><endpoint name="MyServiceEndpoint" bindingNamespace="http://myservice.com/binding"
[ServiceContract(Namespace="urn:gadgets-org")]public interface MyServiceContract {}
[ServiceBehavior(Namespace="urn:my-unique-namespace2")]public class MyService : IMyService
![Page 40: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/40.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 41: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/41.jpg)
I egna applikationer
Hosting - Implementation
[ServiceContract]public interface ILenderService {...}internal class LenderService: ILenderService {...}
public class Program { static void Main(string[] args) { using (ServiceHost host = ServiceHost( typeof(LenderService))) { host.Open(); Console.WriteLine(”Host is active."); Console.ReadLine(); host.Close(); } }}
![Page 42: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/42.jpg)
I hanterad ”Windows Service” Processens livslängd kontrolleras av
OS Inbyggd “Service Control Manager”
Hosting - Implementation
public partial class MyNTService : ServiceBase { private ServiceHost host = null; public MyNTService() { InitializeComponent(); }
protected override void OnStart(string[] args) { this.host = new ServiceHost( typeof(LenderService)); host.Open(); }
protected override void OnStop() { host.Close(); }}
![Page 43: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/43.jpg)
IIS 5.1 och 6 Bara över HTTP
Med WAS HTTP, TCP, NamedPipes
using System.ServiceModel;
namespace MyNamespace{
[ServiceContract]public interface ILender {…}
internal class LenderService: ILender {…}}
Hosting - Implementation
<%@ ServiceHost Language=“C#” Service=“MyNamespace.LenderService” %>
![Page 44: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/44.jpg)
Uppträdanden Vid utveckling
Instansiering ”Concurrency” ”Throttling” ”Transactions”
Vid driftsättning
![Page 45: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/45.jpg)
.PerCall En instans per anrop
.PerSession, .Shareable En instans per session
.Single En instans per tjänst
Instansiering
[ServiceContract] public interface IEcho{ … }
[ServiceBehavior(InstanceContextMode= InstanceContextMode.Single)]internal class MyService: IEcho { …}
![Page 46: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/46.jpg)
.Single Med ytterligare konstruktorer
Instansiering
[ServiceContract]public interface IEcho{ ... }
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]internal class MyService: IEcho { private string myData = null;
private MyService(){} internal MyService(string startUpData){ this.myData=startUpData; } ...}
public class MyHost { MyService service = new MyService(“The initial data”); using(ServiceHost host = new ServiceHost(service)) { ... }}
![Page 47: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/47.jpg)
.PerSession
Instansiering
[ServiceContract][ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]public class Math{ private long sum = 0;
[OperationContract] public int Add(int i, int j) { this.sum = this.sum + i + j; return i + j; } [OperationContract] public long GetTotal() { return this.sum; } [OperationContract] [OperationBehavior(ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)] public void Clear() { this.sum = 0; }}
![Page 48: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/48.jpg)
Kontrollerar trådsäkerhet för ”Service Type” med tre lägen Single (som är grundinställning) Multiple Reentrant
Inte relevant för instansering per anrop
“Concurrency”
[ServiceContract]public interface IEchoContract { ... }
[ServiceBehavior(ConcurrencyMode= ConcurrencyMode.Multiple)]public class EchoService: IEchoContract { ... }
![Page 49: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/49.jpg)
Kan användas för att begränsa last Samtidiga anrop, instanser,
kopplingar
“Throttling”
<behaviors> <behavior> <throttling maxConcurrentCalls="2" maxConnections="10" maxInstances="10"/> </behavior></behaviors>
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]public class MyService { ... }
![Page 50: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/50.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 51: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/51.jpg)
Bindningar En bindning består av
Transport + ”Encoding” + Protokoll
Tre sätt att konfigurera Använd en standard Anpassa en standard Skapa en skräddarsydd
![Page 52: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/52.jpg)
Bindningar En bindning består av
Transport + ”Encoding” + Protokoll
Transport HTTP TCP NamedPipe MSMQ
![Page 53: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/53.jpg)
”Encoding” Text
För bästa interoperabilitet Binary
För bästa prestanda WCF till WCF MTOM
Message Transmission Optimization Protocol
För att bifoga binära tillägg Använder XOP
![Page 54: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/54.jpg)
MTOM ”Encoding” Implementation i WCF
Välj helt enkelt MTOM som ”encoding”
Alla byte[] och strömmar kommer att MTOM’as
<bindings> <wsHttpBinding> <binding name="MTOMBinding" messageEncoding="Mtom"/> </wsHttpBinding></bindings>
![Page 55: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/55.jpg)
Protokoll Kan innehålla
WS-Security WS-ReliableMessaging WS-Coordination och Transaction
![Page 56: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/56.jpg)
Bindningar
Interoperabiliet Säkerhet
SessionTransaktionerDuplex
BasicHttpBinding BP 1.1 T | SWsHttpBinding WS T | S X XWsDualHttpBinding WS S X X XNetTcpBinding .NET T | S X X XNetNamedPipeBinding
.NET T X X X
NetMsmqBinding .NET T | S XCustomBinding * * * * *T = SSL/TLS | S = WS-Security | O = “One-Way Only”
![Page 57: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/57.jpg)
Att välja bindning
BasicHttpBinding
WsHttpBinding
Interop?
Nivå?
Duplex?
WSDualHttpBinding
NetNamedPipeBinding
NetMsmqBinding
NetPeerTcpBinding
NetTcpBinding
Nej
Basic
Nej
Ja
Lokalt?
Köhantering?
P2P?
Nej
Nej
Nej
Ja
Ja
Ja
WS
Ja
![Page 58: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/58.jpg)
Bindningar: Standard<?xml version="1.0" encoding="utf-8" ?><configuration> <system.serviceModel> <services> <service name="MathService"> <endpoint address="http://localhost/MathEndpoint" binding="wsHttpBinding" contract="IMathService" /> </service> </services> </system.serviceModel></configuration>
OBS: Liten bokstav på bindning i konfiguration
![Page 59: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/59.jpg)
Bindningar: Anpassa<configuration> <system.serviceModel> <services> <service name="MathService"> <endpoint address=”http://localhost/MathEndpoint" binding="wsHttpBinding" bindingConfiguration="MTOMOption" contract="IMath"/> </service> </services> <bindings> <wsHttpBinding> <binding name="MTOMOption" messageEncoding="Mtom"/> </wsHttpBinding> </bindings> </system.serviceModel></configuration>
![Page 60: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/60.jpg)
Definera i kod
Bindningar: Skapa egna
public static void Main(string[] args){ ServiceHost host = new ServiceHost(typeof(MathService), "net.tcp://localhost/8080/MathService/");
ReliableSessionBindingElement r = new ReliableSessionBindingElement(); r.AdvancedFlowControl = true;
SecurityBindingElement s = AsymmetricSecurityBindingElement.CreateKerberosBinding();
TcpTransportBindingElement t = new TcpTransportBindingElement(); t.MaxMessageSize = long.MaxValue;
BinaryMessageEncodingBindingElement e = new BinaryMessageEncodingBindingElement();
CustomBinding binding = new CustomBinding(new BindingElement[]{r,s,t,e});
EndpointAddress address = "net.tcp://localhost/8080/Math/"; host.AddEndpoint(typeof(IMath), binding, address);
host.Open();}
![Page 61: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/61.jpg)
Definera i konfiguration
Bindningar: Skapa egna
<?xml version=“1.0” encoding=“UTF-8” ?><configuration> <system.serviceModel> <bindings> <customBinding> <binding name="MyCustomBinding"> <reliableSession enableFlowControl="true"/> <security authenticationMode="Kerberos"/> <binaryMessageEncoding /> <tcpTransport maxReceivedMessageSize=”..." /> </binding> </customBinding> </bindings> </system.serviceModel></configuration>
![Page 62: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/62.jpg)
Adresser Adresser exponerar transportsätt
http://x.se:80/Service/MyEndPoint net.tcp://x.se:8080/Service/
MyEndPoint net.pipe://x.se/Service/MyEndPoint net.msmq://x.se/MyQueue
![Page 63: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/63.jpg)
Per tjänst En basadress per transportsätt
Per “Endpoint” Adressen är relativ till basadressen
class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost( typeof(EchoService), new Uri("http://localhost:8000/EchoService"))) { host.Open(); Console.ReadLine(); host.Close();} } }
Adresser
<service name=”EchoService"> <endpoint address="Echo" binding="basicHttpBinding" contract="IEcho"/></service>
![Page 64: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/64.jpg)
Hostning i IIS eller WAS Adressen är URL för .SVC fil Ex:
http://localhost/MyService/Service.svc
Adresser
<configuration> <system.serviceModel> <services> <service name="Program"> <endpoint address="" binding="basicHttpBinding" contract="IEcho"/> </service> </services> </system.serviceModel></configuration>
![Page 65: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/65.jpg)
Med kod, metod 1 One-off “In-line Proxy”
Klienter
using System.ServiceModel;namespace MyNamespace { public interface IEcho { string Echo(string input); }
public class Program { public static void Main(string[] arguments) { IEcho proxy = new ChannelFactory<IEcho> ("EchoService").CreateChannel(); Console.WriteLine(proxy.Echo(”Ping")); ((IChannel)proxy).Close(); } }}
![Page 66: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/66.jpg)
Med kod, metod 2 Återanvändbar “klass-proxy”
Klienter
using System.ServiceModel;[ServiceContract]public interface IEchoService { [OperationContract] string Echo(string input);}
internal class EchoServiceClient: ClientBase<IEchoService>, IEchoService { public EchoServiceClient(string configurationName) :base(configurationName) { } string IEchoService.Echo(string input) { return this.InnerProxy.Echo(input); }}
public class Program { public static void Main(string[] arguments) { EchoServiceClient client = new EchoServiceClient("EchoService"); ((IEchoServiceClient)client).Echo("Hello, World!"); client.Close(); }}
![Page 67: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/67.jpg)
Konfigurationen
Klienter
<system.serviceModel> <client> <endpoint name="EchoService" address=”http://localhost:8000/EchoService/Echo" binding="basicHttpBinding" contract="MyNamespace.IEcho"/> </client></system.serviceModel>
![Page 68: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/68.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 69: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/69.jpg)
Migrering eller samexistens
Sida-vid-sida Uppgradering
Interoperabilitet
![Page 70: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/70.jpg)
using System.Web.Services; public class AccountingOperation{ public string AccountName; public long Amount; }
public class Accounting {
[WebMethod(TransactionOption=TransactionOption.RequiresNew)] public int AddEntry(AccountingOperation debit, AccountingOperation credit) { // Add entry to internal accounting book // return id. }}
using System.ServiceModel;
[ServiceContract(FormatMode=ContractFormatMode.XmlSerializer)]
[OperationContract][OperationBehavior(AutoEnlistTransaction=true)]
//
//
ASMX till WCF
![Page 71: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/71.jpg)
public class Accounting : ServicedComponent{
public void AddCreditEntry(string creditAccount, int creditAmount) { }}
using System.EnterpriseServices;
[ComponentAccessControl][SecureMethod][Transaction(TransactionOption.Required)]
[SecurityRole("Manager")]
using System.ServiceModel;
[ServiceContract]
[OperationContract][OperationBehavior(AutoEnlistTransaction=true)][PrincipalPermission(SecurityAction.Demand, Role="Managers")]
//
//////
//
COM+ till WCF
![Page 72: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/72.jpg)
using Microsoft.Web.Services3;
[WebService]class HelloWorld {
[WebMethod] public string Hello (string text) {
MessageSignature signature = (MessageSignature)RequestSoapContext.Current.Security.Elements[0];if (!signature.SigningToken.Principal.IsInRole ("BUILTIN\Administrators"))
throw new AuthorizationException("Access denied"); return String.Format("Hello, {0}", text); }}
// Konfigurationsförändringar krävs också
[OperationContract][PrincipalPermission(SecurityAction.Demand, null, "BUILTIN\Administrators")]
using System.ServiceModel;
[ServiceContract]
//
//
//
//////////
WSE till WCF
![Page 73: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/73.jpg)
class MyQService { public void ReceiveOrders() { MessageQueue Queue = new MessageQueue(@".\private$\Books"); XmlMessageFormatter formatter = new XmlMessageFormatter( new Type[] { typeof(System.Data.DataSet)}); Queue.Formatter = formatter; System.Messaging.Message msg = null; while((msg= Queue.Receive()) != null) {
DataSet booklist = (DataSet) msg.Body; ProcessOrders(booklist);
} }
Public void ProcessOrder(DataSet BookList) { ... }
}
using System.Messaging;using System.ServiceModel;
[ServiceContract]
[OperationContract(IsOneWay = true)]
//
//
//
//////////////
////
//
MSMQ till WCF
![Page 74: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/74.jpg)
using System.Runtime.Remoting; [Serializable]public class AccountingOperation{ public string AccountName; public long Amount; } public class Accounting { public int AddEntry(AccountingOperation debit, AccountingOperation credit) { // Add entry to internal accounting book // return id. }}
using System.ServiceModel;
[ServiceContract]
[OperationContract]
: MarshalByRefObject
//
//
.NET Remoting till WCF
![Page 75: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/75.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 76: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/76.jpg)
Monitorering Loggning Tracing Performance Counters Event Logging WMI
![Page 77: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/77.jpg)
Loggning<system.serviceModel> <diagnostics> <messageLogging logEntireMessage="true" maxMessagesToLog="300" logMessagesAtServiceLevel="true" logMalformedMessages="true" logMessagesAtTransportLevel="false" /> </diagnostics></system.serviceModel><system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging"> <listeners> <add name="MyListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\logs\ClientTraces.e2e" traceOutputOptions="None" /> </listeners> </source> </sources></system.diagnostics>
![Page 78: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/78.jpg)
Tracing Källor
System.Security.Authorization Microsoft.InfoCards.Diagnostics System.IO.Log System.Runtime.Serialization System.ServiceModel Microsoft.TransactionsBridgs.Dtc
Nivåer All, Off Critical, Error, Warning Information, Verbose ActivityTracing
![Page 79: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/79.jpg)
Slå på räknare per service Kan sättas i machine.config
Kan analyseras på fyra nivåer ServiceHost Endpoint Operation (AppDomain)
<configuration> <system.serviceModel> <diagnostics performanceCountersEnabled="true"/> </system.serviceModel></configuration>
“Performance Counters”
![Page 80: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/80.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 81: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/81.jpg)
Säkerhet och WCF Säkerheten i WCF erbjuder två saker
Säker överföring av meddelanden mellan entiteter
Begränsa åtkomst till resurser från entiteter
Entitet Person, företag, applikation
Resurs Fil, tjänst, operation
![Page 82: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/82.jpg)
Säkerhet för meddelanden Konfidentiell Integritet Autentisering Auktorisering
Loggning
![Page 83: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/83.jpg)
Vitsord – “Credentials” Utsagor – “Claims”
Information om en entitet Används för att kontrollera åtkomst
till resuser Utfärdare – “Issuer”
Certifierar utsagor i vitsord Bevis på ägandeskap – ”Proof of
possession” Hur en enitet bevisar sina utsagor
![Page 84: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/84.jpg)
Säkerhetsmodellen i WCF Baseras på vitsord och utsagor
Kan erbjuda önskade krav på säkerhet
Säkert som grundinställning Utom vid interoperabilitet BasicHttpBinding
Konsekvent mellan inställningar (bindningar)
Konsekvent mellan vitsord
![Page 85: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/85.jpg)
Säkerhet på transportnivå Säkerhetskraven erbjuds på
transportlagret Fördelar
Bra prestanda Vanlig implementation Små förändringar
Nackdelar Begränsad uppsättning utsagor Ingen säkerhet utanför “tråden”
![Page 86: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/86.jpg)
Säkerhet på transportnivå<endpoint address="https://localhost/calculator" binding="basicHttpBinding" bindingConfiguration=”SSLBinding" contract="ICalculator" />
<basicHttpBinding> <binding name="SSLBinding"> <security mode="Transport"> <transport clientCredentialType="None"/> </security> </binding></basicHttpBinding>
![Page 87: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/87.jpg)
Säkerhet på meddelanden Säkerhetskraven erbjuds på
meddelandelagret Fördelar
Stöd för fler typer av utsagor Utbyggbart Säkerhet från “början till slut”
Nackdelar Standards och användning
konsolideras fortfarande Viss påverkan på prestandan
![Page 88: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/88.jpg)
Säkerhet på meddelandenivå<endpoint address="http://localhost/calculator" binding=”wsHttpBinding" bindingConfiguration=”WSBinding" contract="ICalculator" />
<wsHttpBinding> <binding name=”WSBinding"> <security mode=”Message"> <message clientCredentialType=”Windows"/> </security> </binding></wsHttpBinding>
![Page 89: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/89.jpg)
“Mixed Mode” Kompromiss mellan säkerhet på
transport- och meddelande-nivån Transportnivån erbjuder
integritet och konfidentiallitet Fördelar för prestandan
Meddelandenivån hanterar utsagor Rika “vitsord”, utbyggbart
![Page 90: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/90.jpg)
“Mixed Mode”<endpoint address="https://localhost/calculator" binding=”wsHttpBinding" bindingConfiguration=”MixedBinding" contract="ICalculator" />
<wsHttpBinding> <binding name=”MixedBinding"> <security mode=” TransportWithMessageCredential"> <message clientCredentialType=”Windows"/> </security> </binding></wsHttpBinding>
![Page 91: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/91.jpg)
Användarnamn/lösenord
Console.WriteLine(" Enter username[domain\\user]:");string username = Console.ReadLine();Console.WriteLine(" Enter password:");string password = Console.ReadLine();
CalculatorProxy wsProxy = new CalculatorProxy();wsProxy.ChannelFactory.Credentials. UserName.UserName = username;wsProxy.ChannelFactory.Credentials. UserName.Password = password;
![Page 92: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/92.jpg)
“Impersonation”[OperationBehavior( Impersonation=ImpersonationOption.Required)]public double Sub(int a, int b){ return a - b;}
public double Add(int a, int b){ using (ServiceSecurityContext.Current. WindowsIdentity.Impersonate()) { return a + b; }}
![Page 93: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/93.jpg)
“PrincipalPermission”[PrincipalPermission(SecurityAction.Demand, Role="Builtin\\Administrators")]public double Mul(int a, int b){ return a * b;}
<behaviors> <behavior name="BuiltinSecurity"> <serviceAuthorization principalPermissionMode="UseWindowsGroups"/> </behavior></behaviors>
![Page 94: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/94.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 95: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/95.jpg)
Transaktioner Atomiska eller kompenserande
Välj mellan koppling eller komplexitet Atomiska transaktioner
Enklare att utveckla Negativ påverkan på prestandan “Tightare”-koppling
Kompenserande aktivitet Mer komplex att utveckla Bättre prestanda “Lösare”-koppling
Välj modell baserat på situationen
![Page 96: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/96.jpg)
Transaktioner
[ServiceContract]public interface IMyContract{ [OperationContract] [TransactionFlow(TransactionFlowOption.Required)] bool Transfer1(Account from, Account to, decimal amount);
[OperationContract] [TransactionFlow(TransactionFlowOption.NotAllowed)] bool Transfer2(Account from, Account to, decimal amount);
}
Delta i en transaktion
![Page 97: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/97.jpg)
Transaktioner
public class MyService: IMyContract{ [OperationBehavior( TransactionScopeRequired = true, TransactionAutoComplete = true)] public bool Transfer1( Account from, Account to, decimal amount) { ... } [OperationBehavior( TransactionScopeRequired = true, TransactionAutoComplete = false)] public bool Transfer2( Account from, Account to, decimal amount) { ... OperationContext.Current.SetTransactionComplete(); } }
Utvecklaren av tjänsten
![Page 98: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/98.jpg)
Transaktioner
TransactionScope transaction;using (scope = new TransactionScope()){ proxyOne.Transfer1(AccountOne, AccountTwo, amount); proxyTwo.Transfer1(AccountThree,AccountFour,amount); UpdateLocalCache(AccountOne, AccountTwo, amount); scope.Complete(); }
Använda transaktioner Klientsidan
![Page 99: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/99.jpg)
Transaktioner
<bindings> <wsHttpBinding> <binding name="SampleBinding“ transactionFlow=“true" /> </binding> </wsHttpBinding></bindings>
Kontroll av transaktioner Administratören av tjänsten
![Page 100: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/100.jpg)
Agenda Vad är WCF Programmera WCF
Kontrakt ”Hostning” och uppträdanden Bindningar och metadata
Andra koncept Migrering eller integration Monitorering Säkerhet Transaktioner Köhantering
![Page 101: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/101.jpg)
Hur fungerar köer?
Meddelande M
edde
land
e
Klient Tjänst
“Queue”“Queue”
![Page 102: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/102.jpg)
Köer Förbättrar tillgängligheten
Döljer åtkomst till tjänst eller nätverk Stöd för utskalning
Flera läsare från en kö Erbjuder lastbalansering
Buffrar meddelanden för senare hantering
Är en av byggstenarna för kompenserande aktiviteter
![Page 103: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/103.jpg)
Hur köer fungerar!
Meddelande Meddelande
Klient Tjänst
“Dead LetterQueue”
“Queue”
“Poison Queue”
“Queue”
![Page 104: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/104.jpg)
“Queue Endpoint”<endpoint address ="net.msmq://MyServer/private/MyQueue/”" binding="netMsmqBinding" bindingConfiguration ="MyQueueBinding" contract="IPurchaseOrder" />
![Page 105: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/105.jpg)
Integrera med ASP.NET HttpContext.Current som i ASMX Värden måste vara IIS 5.1, 6 eller
WAS Bara för transport över HTTP[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)][ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]internal class TallyService: ITally { long ITally.Tally(int value) { long? currentTally = (long?)HttpContext.Current.Session["Tally"]; if(currentTally == null)currentTally = 0; currentTally++; HttpContext.Current.Session["Tally"] = currentTally++; return currentTally; }}
![Page 106: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/106.jpg)
Integrera med ASP.NET Slå på i konfigurationen
Web.config<system.serviceModel> <services> <service name="HostedService.TallyService, HostedService"> <endpoint address="" binding="basicHttpBinding" contract="HostedService.ITally, HostedService"/> </service> </services> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/></system.serviceModel>
![Page 107: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/107.jpg)
Integrera med ASP.NET På klientsidan<system.serviceModel> <client> <endpoint name="TallyService" address="http://x.se/TallyService/Service.svc" binding="customBinding” bindingConfiguration="AllowCookieBinding" contract="HostedService.ITally, Client"/> </client> <bindings> <customBinding> <binding name="AllowCookieBinding"> <httpTransport allowCookies="true"/> </binding> </customBinding> </bindings></system.serviceModel>
![Page 108: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/108.jpg)
“ASP.NET Providers” Medlemskap
Existerar en användare? Har användaren specificerat korrekta
“vitsord”
Rollhantering Tillhör användaren en specifik grupp? Vilka grupper tillhör användaren?
![Page 109: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/109.jpg)
RoleProviderpublic abstract class RoleProvider{ public abstract void CreateRole(string roleName); public abstract bool DeleteRole(string roleName, bool throwOnPopulatedRole); public abstract bool RoleExsts(string roleName); public abstract string[] GetAllRoles(); public abstract void AddUsersToRoles( string[] userNames, string[] roleNames); public abstract void RemoveUsersFromRoles( string[] usernames, string[] roleNames); public abstract string[] GetUsersInRole( string roleName); public abstract string[] FindUsersInRole( string roleName, string usernameToMatch); public abstract string[] GetRolesForUser( string userName); public abstract bool IsUserInRole( string username, string roleName);}
![Page 110: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/110.jpg)
Arkitekturen[PrincipalPermissionAttribute( SecurityAction.Demand, Role="Supervisor")]public void MyMethod(string input){...}
Din kod
Konfiguration
Val av lagring och administration
<system.web> <roleManager enabled="true” defaultProvider="AuthorizationManagerRoleProvider"> <providers> <add name="AuthorizationManagerRoleProvider" type="AuthorizationManagerRoleProvider, Service" description="Role Provider to Authorization Manager" store="msxml://C:\apps\RoleProvider\AuthorizationStore.xml" applicationName="RoleProvider"/> </providers> </roleManager></system.web>
![Page 111: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/111.jpg)
Resurser Webbsidor
http://wcf.netfx3.com Bloggar
http://blogs.msdn.com/craigmcmurtry/
http://pluralsight.com/blogs/dbox/ Böcker och tidskrifter
Programming ”Indigo” MSDN Magazine
![Page 112: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/112.jpg)
![Page 113: Välkommen till Sommarkollo 2006 Windows Communication Foudnation](https://reader035.vdocuments.net/reader035/viewer/2022081513/56812a66550346895d8de5dd/html5/thumbnails/113.jpg)
http://blogs.msdn.com/[email protected]