MSDN%20Update%20-%20WCF - PowerPoint PPT Presentation

About This Presentation
Title:

MSDN%20Update%20-%20WCF

Description:

Remoting ASMX / WSE DCOM System.Messaging Enterprise Services Microsoft Sockets RMI JAX-RPC CORBA JMS EJB J2EE Sockets WCF byggstenar F renar teknikerna f r ... – PowerPoint PPT presentation

Number of Views:186
Avg rating:3.0/5.0
Slides: 114
Provided by: Johan178
Category:
Tags: 20update | 20wcf | msdn

less

Transcript and Presenter's Notes

Title: MSDN%20Update%20-%20WCF


1
2006
Välkommen till Sommarkollo 2006 Windows
Communication Foudnation
2
Windows Communication Foundation
  • Johan Lindfors

3
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

4
Hur ser det ut idag?
J2EE
Microsoft
JAX-RPC
ASMX / WSE
RMI
Remoting
CORBA
DCOM
EJB
Enterprise Services
JMS
System.Messaging
Sockets
Sockets
5
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
6
Lite om generiska klasser
  • 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()
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
7
Utan generiska klasser
  • Hur kul är det här egentligen?

public class IntegerStack int items
public void Push(int item) public int
Pop()
public class StringStack string items
public void Push(string item) public
string Pop()
8
Med generiska klasser
  • Mallen
  • Användningen

public class StackltTgt //T är generisk
typparameter T items public void
Push(T item) public T Pop()
Stackltintgt integerStack new Stackltintgt()
integerStack.Push(1) Stackltstringgt stringStack
new Stackltstringgt() stringStack.Push(Hello,
World!)
9
Detaljer
  • Flera typer vid definition
  • Använda aliaser
  • Begränsningar

public class PointltX,Ygt Pointltint,intgt point
null
using IntegerPoint Pointltint,intgt IntegerPoint
point null
public class StackltTgt where T IComparable public
class NodeltTgt where T new() private T
item new T()
10
Mer detaljer
  • Kan bara konvertera typparametrar till
    interface
  • Ärva från en generisk klass

class MyClassltTgt void SomeMethod(T t)
ISomeInterface something
(ISomeInterface)t SomeClass
somethingElse (SomeClass)t //Error!
public BaseClassltTgt public ChildClass
BaseClassltstringgt
11
Mer detaljer
  • Generiska metoder

public class MyClass public void
MyMethodltTgt(T t) MyClass
instance new MyClass() instance.MyMethod(3) in
stance.MyMethod(Hello, World)
12
Klienter och tjänster
Klient
Tjänst
13
Endpoints
Klient
Tjänst
Endpoint
Endpoint
Endpoint
Endpoint
  • Endpoints exponerar funktionalitet

14
Adress, Bindning, Kontrakt
Klient
Tjänst
C
B
A
A
B
C
C
B
A
C
B
A
  • Endpoints exponerar funktionalitet
  • Adress beskriver VART!
  • Bindning beskriver HUR!
  • Kontrakt beskriver VAD!

15
Metadata
WSDL
Klient
Tjänst
C
B
A
A
B
C
C
B
A
C
B
A
  • Endpoints exponerar funktionalitet
  • Adress beskriver VART!
  • Bindning beskriver HUR!
  • Kontrakt beskriver VAD!
  • WSDL beskriver endpoints

16
Uppträdanden
WSDL
Klient
Tjänst
C
B
A
A
B
C
C
B
A
C
B
A
U
U
U
  • Uppträdanden beskriver exempelvis
  • Instansiering och aktivering
  • Sessionshantering
  • Transaktioner

17
Definition av kontrakt och tjänst
  • Kontrakt
  • Implementation

ServiceContract public interface IHello
OperationContract string Hello(string
name)
public class HelloService IHello public
string Hello(string name) return
"Hello, " name
18
Hostning av tjänsten
  • I en egen applikation
  • IIS/WAS (http//localhost/HelloService/HelloServ
    ice.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()
lt_at_ ServiceHost LanguageC
ServiceHelloService gt
19
Konfiguration
lt?xml version"1.0" encoding"utf-8"
?gt ltconfigurationgt ltsystem.serviceModelgt
ltservicesgt ltservice name"HelloService"gt
ltendpoint address"http//localhos
t/HelloService" binding"basicHttpBindin
g" contract"IHello" /gt
lt/servicegt lt/servicesgt lt/system.serviceModel
gt lt/configurationgt
20
Implementera klienten
  • Kod
  • Konfiguration

static void Main() IHello proxy new
ChannelFactoryltIHellogt
("HelloEndpoint").CreateChannel() string r
proxy.Hello("Beat") Console.WriteLine(r)
ltsystem.serviceModelgt ltclientgt ltendpoint
name"HelloEndpoint" address"http//localho
st/HelloService" binding"basicHttpBinding"
contract"IHello" /gt lt/clientgt lt/system.
serviceModelgt
21
Arkitektur för dagen
22
Arkitektur för dagen
Grundläggande
23
StoreService
  • Vår samlingstjänst där allting händer

24
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

25
Kontrakt
  • Strukturella Structural
  • DataContract
  • MessageContract
  • Agerande Behavioral
  • ServiceContract
  • OperationContract
  • FaultContract

26
DataContract
  • Oberoende av OO-åtkomstnivåer

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
27
DataContract
  • Hantering av samlingar

DataContract public class LibraryCatalog
DataMember System.Collections.Hashtable
catalog
28
DataContract
  • Använda KnownType-attributet

DataContract KnownType(typeof(Book)) KnownTyp
e(typeof(Magazine)) public class
LibraryCatalog DataMember System.Collections
.Hashtable catalog DataContract public
class Book DataContract public class
Magazine
29
DataContract
  • Vid osäkerhet av datatyper

DataContract KnownType(typeof(Book)) KnownTyp
e(typeof(Magazine)) public class
PublishedItem DataMember object
catalog DataMember DateTime
publicationDate DataContract public class
Book DataContract public class Magazine
30
DataContract
  • Versionshantering

DataContract public class Car
DataMember(IsRequired true) public string
Model DataMember(IsRequired false)
//default public int HorsePower
31
DataContract
  • Versionshantering, planera i förväg

DataContract public class Person
IExtensibleDataObject public virtual
ExtensionDataObject UnknownData get
return this.unknownData set
this.unknownData value
DataMember public string fullName
private ExtensionDataObject unknownData
32
MessageContract
  • För skräddarsydda SOAP-headers
  • Vilket inte rekommenderas

DataContract public class PurchaseOrder
... MessageContract public class
PurchaseOrderMessage MessageHeader
public int Number MessageBody(Order 1)
public PurchaseOrder Order
33
ServiceContract
  • Kontrollerar hur strukturella kontrakt
    serialiseras

ServiceContract DataContractFormat(
StyleOperationFormatStyle.Document) //Or
Rpc public interface IOrderEntry
... ServiceContract XmlSerializerFormat(
StyleOperationFormatStyle.Document,
UseOperationFormatUse.Literal) //Or
Encoded public interface IOrderEntry ...
34
ServiceContract
  • Duplex

ServiceContract(Session true,
CallbackContract typeof(IOrderEntryCallback)) p
ublic interface IOrderEntry
OperationContract(IsOneWay true) void
PlaceOrder(PurchaseOrder order) ServiceContra
ct public interface IOrderEntryCallback
OperationContract(IsOneWay true) void
PlaceOrderCompleted( PurchaseOrderStatus
orderStatus)
35
ServiceContract
  • Arv
  • Används vid versionshantering
  • Även vid flera kontrakt vid en endpoint

ServiceContract public interface IOrderEntry
OperationContract(IsOneWay true) void
PlaceOrder(PurchaseOrder order) ServiceContra
ct public interface IExtendedOrderEntry
IOrderEntry OperationContract
PurchaseOrder GetOrder(String orderIdentifier)
36
ServiceContract
  • Implementation
  • En implementation av ett interface
  • Klassen kallas då Service Type

ServiceContract public interface IOrderEntry
OperationContract(IsOneWay true) void
PlaceOrder(PurchaseOrder order) internal
class OrderEntryService IOrderEntry void
IOrderEntry.PlaceOrder(PurchaseOrder order)
//Your code goes here
37
OperationContract
  • Exponera metoder
  • Egenskapen Action

ServiceContract public interface IOrderEntry
OperationContract(IsOneWay true) void
PlaceOrder(PurchaseOrder order)
ServiceContract public interface
IOrderEntry OperationContract(
Action"http//contoso.com/GetOrder",
ReplyAction"http//contoso.com/GetOrderReply")
PurchaseOrder GetOrder(String orderIdentifier)
38
OperationContract
  • Rekommendation
  • Använd Action som en generell funktion

ServiceContract public interface MyContract
OperationContract(IsOneWay true,
Action"urncrudinsert") void
ProcessInsertMessage(Message message)
OperationContract(IsOneWay true,
Action"urncrudupdate") void
ProcessUpdateMessage(Message message)
OperationContract(IsOneWay true,
Action"urncruddelete") void
ProcessDeleteMessage(Message message)
OperationContract(IsOneWay true, Action"")
void ProcessUnrecognizedMessage(Message
message)
39
OperationContract
  • Synkront
  • Asynkront

ServiceContract public interface IMath
OperationContract int Add(int I, int j)
ServiceContract public interface IMath
OperationContract(AsyncPattern true)
IAsyncResult BeginAdd( int i, int j,
AsyncCallback cb, object o) int
EndAdd(IAsyncResult result)
40
FaultContract
DataContract class MyFault DataMember
public string Reason null ServiceContract
public interface IOrderEntry
OperationContract FaultContract(typeof(MyFa
ult)) 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 FaultExceptionltMyFaul
tgt(theFault)
41
FaultContract
  • På klienten

DataContract(Name"MyFault") public class
ClientFault DataMember string Reason
null ... try PurchaseOrder order
Service.GetOrder(orderId) catch
(FaultExceptionltClientFaultgt clientFault)
Console.WriteLine(clientFault.Detail.Reason)
42
Programmera kontrakt
  • Kod först
  • Kontrakt först

ServiceContract public class OrderEntry
OperationContract(IsOneWay true) public
void PlaceOrder(PurchaseOrder order)
return
ServiceContract public interface IOrderEntry
OperationContract(IsOneWay true) void
PlaceOrder(PurchaseOrder order) public class
OrderEntry IOrderEntry public void
PlaceOrder(PurchaseOrder order)
return
43
WCF och WSDL
  • WSDL kontrakt genereras i flera filer
  • Använder ltwsdlimport.../gt
  • Scheman separeras alltid från tjänsten
  • ltwsdldefinitionsgt
  • ltwsdlportType.../gt
  • ltwsdlbinding.../gt
  • ltwsdlservice.../gt

ServiceContract(Namespace"urngadgets-org") pub
lic interface MyServiceContract
ltendpoint name"MyServiceEndpoint"       bindingNa
mespace"http//myservice.com/binding"
ServiceBehavior(Namespace"urnmy-unique-namespac
e2") public class MyService IMyService
44
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

45
Hosting - Implementation
  • I egna applikationer

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()
46
Hosting - Implementation
  • I hanterad Windows Service
  • Processens livslängd kontrolleras av OS
  • Inbyggd Service Control Manager

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()
47
Hosting - Implementation
  • 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
lt_at_ ServiceHost LanguageC
ServiceMyNamespace.LenderService gt
48
Uppträdanden
  • Vid utveckling
  • Instansiering
  • Concurrency
  • Throttling
  • Transactions
  • Vid driftsättning

49
Instansiering
  • .PerCall
  • En instans per anrop
  • .PerSession, .Shareable
  • En instans per session
  • .Single
  • En instans per tjänst

ServiceContract public interface IEcho
ServiceBehavior(InstanceContextMode
InstanceContextMode.Single) internal class
MyService IEcho
50
Instansiering
  • .Single
  • Med ytterligare konstruktorer

ServiceContract public interface IEcho ...
ServiceBehavior(InstanceContextModeInstanceCo
ntextMode.Single) internal class MyService
IEcho private string myData null
private MyService() internal
MyService(string startUpData)
this.myDatastartUpData ... public
class MyHost MyService service new
MyService(The initial data)
using(ServiceHost host new ServiceHost(service))
...
51
Instansiering
  • .PerSession

ServiceContract ServiceBehavior(InstanceContext
Mode InstanceContextMode.PerSession) publi
c 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(Re
leaseInstanceMode ReleaseInstanceMode.A
fterCall) public void Clear() this.sum
0
52
Concurrency
  • 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

ServiceContract public interface IEchoContract
... ServiceBehavior(ConcurrencyMode
ConcurrencyMode.Multiple) public class
EchoService IEchoContract ...
53
Throttling
  • Kan användas för att begränsa last
  • Samtidiga anrop, instanser, kopplingar

ServiceBehavior(ConcurrencyMode
ConcurrencyMode.Multiple) public class MyService
...
ltbehaviorsgt ltbehaviorgt ltthrottling
maxConcurrentCalls"2"
maxConnections"10"
maxInstances"10"/gt lt/behaviorgt lt/behaviorsgt
54
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

55
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

56
Bindningar
  • En bindning består av
  • Transport
  • Encoding
  • Protokoll
  • Transport
  • HTTP
  • TCP
  • NamedPipe
  • MSMQ

57
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

58
MTOM Encoding
  • Implementation i WCF
  • Välj helt enkelt MTOM som encoding
  • Alla byte och strömmar kommer att MTOMas

ltbindingsgt ltwsHttpBindinggt ltbinding
name"MTOMBinding" messageEncoding"Mtom"/gt
lt/wsHttpBindinggt lt/bindingsgt
59
Protokoll
  • Kan innehålla
  • WS-Security
  • WS-ReliableMessaging
  • WS-Coordination och Transaction

60
Bindningar
Interoperabiliet Säkerhet Session Transaktioner Duplex
BasicHttpBinding BP 1.1 T S
WsHttpBinding WS T S X X
WsDualHttpBinding WS S X X X
NetTcpBinding .NET T S X X X
NetNamedPipeBinding .NET T X X X
NetMsmqBinding .NET T S X
CustomBinding
  • T SSL/TLS S WS-Security O One-Way Only

61
Att välja bindning
62
Bindningar Standard
lt?xml version"1.0" encoding"utf-8"
?gt ltconfigurationgt ltsystem.serviceModelgt
ltservicesgt ltservice name"MathService"gt
ltendpoint address"http//localhost
/MathEndpoint" binding"wsHttpBinding"
contract"IMathService" /gt
lt/servicegt lt/servicesgt lt/system.serviceModel
gt lt/configurationgt
OBS Liten bokstav på bindning i konfiguration
63
Bindningar Anpassa
ltconfigurationgt ltsystem.serviceModelgt
ltservicesgt ltservice name"MathService"gt
ltendpoint addresshttp//localhost/
MathEndpoint" binding"wsHttpBinding"
bindingConfiguration"MTOMOption"
contract"IMath"/gt lt/servicegt
lt/servicesgt ltbindingsgt ltwsHttpBindinggt
ltbinding name"MTOMOption"
messageEncoding"Mtom"/gt lt/wsHttpBindinggt
lt/bindingsgt lt/system.serviceModelgt lt/configura
tiongt
64
Bindningar Skapa egna
  • Definera i kod

public static void Main(string args)
ServiceHost host new ServiceHost(typeof(MathServ
ice), "net.tcp//localhost/8080/MathServic
e/") ReliableSessionBindingElement r new
ReliableSessionBindingElement()
r.AdvancedFlowControl true
SecurityBindingElement s
AsymmetricSecurityBindingElement.CreateKerberosBin
ding() TcpTransportBindingElement t new
TcpTransportBindingElement()
t.MaxMessageSize long.MaxValue
BinaryMessageEncodingBindingElement e
new BinaryMessageEncodingBindingElement()
CustomBinding binding new CustomBinding(new
BindingElementr,s,t,e) EndpointAddress
address "net.tcp//localhost/8080/Math/"
host.AddEndpoint(typeof(IMath), binding,
address) host.Open()
65
Bindningar Skapa egna
  • Definera i konfiguration

lt?xml version1.0 encodingUTF-8
?gt ltconfigurationgt ltsystem.serviceModelgt
ltbindingsgt ltcustomBindinggt ltbinding
name"MyCustomBinding"gt
ltreliableSession enableFlowControl"true"/gt
ltsecurity authenticationMode"Kerberos"/gt
ltbinaryMessageEncoding /gt
lttcpTransport maxReceivedMessageSize
..." /gt lt/bindinggt
lt/customBindinggt lt/bindingsgt
lt/system.serviceModelgt lt/configurationgt
66
Adresser
  • Adresser exponerar transportsätt
  • http//x.se80/Service/MyEndPoint
  • net.tcp//x.se8080/Service/MyEndPoint
  • net.pipe//x.se/Service/MyEndPoint
  • net.msmq//x.se/MyQueue

67
Adresser
  • 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//localhost8000/EchoService
"))) host.Open()
Console.ReadLine() host.Close()
ltservice nameEchoService"gt ltendpoint
address"Echo" binding"basicHttpBinding"
contract"IEcho"/gt lt/servicegt
68
Adresser
  • Hostning i IIS eller WAS
  • Adressen är URL för .SVC fil
  • Ex http//localhost/MyService/Service.svc

ltconfigurationgt ltsystem.serviceModelgt
ltservicesgt ltservice name"Program"gt
ltendpoint address""
binding"basicHttpBinding"
contract"IEcho"/gt lt/servicegt
lt/servicesgt lt/system.serviceModelgt lt/configurati
ongt
69
Klienter
  • Med kod, metod 1
  • One-off In-line Proxy

using System.ServiceModel namespace MyNamespace
public interface IEcho string
Echo(string input) public class
Program public static void
Main(string arguments) IEcho
proxy new ChannelFactoryltIEchogt
("EchoService").CreateChannel()
Console.WriteLine(proxy.Echo(Ping"))
((IChannel)proxy).Close()
70
Klienter
  • Med kod, metod 2
  • Återanvändbar klass-proxy

using System.ServiceModel ServiceContract publi
c interface IEchoService OperationContract
string Echo(string input) internal class
EchoServiceClient ClientBaseltIEchoServicegt,
IEchoService public EchoServiceClient(string
configurationName) base(configurationNam
e) 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()

71
Klienter
  • Konfigurationen

ltsystem.serviceModelgt ltclientgt
ltendpoint name"EchoService"
addresshttp//localhost8000/EchoService/Echo"
binding"basicHttpBinding"
contract"MyNamespace.IEcho"/gt
lt/clientgt lt/system.serviceModelgt
72
Arkitektur för dagen
Med Callback
73
IAdminService
  • Callback-funktionalitet

74
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

75
Migrering eller samexistens
Uppgradering
76
ASMX till WCF
using System.Web.Services      public class
AccountingOperation     public string
AccountName     public long Amount       
  public class Accounting    
WebMethod(TransactionOptionTransactionOption.Req
uiresNew)     public int AddEntry(AccountingOpera
tion debit,                         AccountingOper
ation credit)             // Add entry to
internal accounting book         // return
id.    
//
using System.ServiceModel
ServiceContract(FormatModeContractFormatMode.Xml
Serializer)
//
OperationContract OperationBehavior(AutoEnlistT
ransactiontrue)
77
COM till WCF
using System.EnterpriseServices ComponentAccess
Control SecureMethod Transaction(TransactionOp
tion.Required) SecurityRole("Manager")
//
using System.ServiceModel
//
//
//
public class Accounting ServicedComponent     
        public void AddCreditEntry(strin
g creditAccount, int creditAmount)           
  
ServiceContract
OperationContract OperationBehavior(AutoEnlistT
ransactiontrue) PrincipalPermission(SecurityAct
ion.Demand, Role"Managers")
//
78
WSE till WCF
//
  • using Microsoft.Web.Services3
  • WebService
  • class HelloWorld
  •    
  • WebMethod
  •     public string Hello (string text)
  • MessageSignature signature (MessageSignature)
  • RequestSoapContext.Current.Security.Elements0
  • if (!signature.SigningToken.Principal.IsInRole
  • ("BUILTIN\Administrators"))
  •             throw new AuthorizationException("Acce
    ss denied")
  •  
  •         return String.Format("Hello, 0", text)
  •    

using System.ServiceModel
//
ServiceContract
OperationContract PrincipalPermission(SecurityA
ction.Demand, null, "BUILTIN\Administrators")
//
//
//
//
//
//
79
MSMQ till WCF
using System.Messaging
//
using System.ServiceModel ServiceContract
class MyQService public void
ReceiveOrders() MessageQueue Queue
new MessageQueue(_at_".\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) ...

//
//
//
//
//
//
//
//
//
//
//
//
OperationContract(IsOneWay true)
80
.NET Remoting till WCF
using System.Runtime.Remoting   
  Serializable public class AccountingOperation
    public string AccountName     public long
Amount          public class Accounting
    public int AddEntry(AccountingOperation
debit,                         AccountingOperatio
n credit)             // Add entry to internal
accounting book         // return id.    
//
using System.ServiceModel
ServiceContract
MarshalByRefObject
//
OperationContract
81
Arkitektur för dagen
Med integration
82
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

83
Monitorering
  • Loggning
  • Tracing
  • Performance Counters
  • Event Logging
  • WMI

84
Loggning
ltsystem.serviceModelgt ltdiagnosticsgt
ltmessageLogging logEntireMessage"true"
maxMessagesToLog"300"
logMessagesAtServiceLevel"true"
logMalformedMessages"true"
logMessagesAtTransportLevel"false" /gt
lt/diagnosticsgt lt/system.serviceModelgt ltsystem.diag
nosticsgt ltsourcesgt ltsource
name"System.ServiceModel.MessageLogging"gt
ltlistenersgt ltadd
name"MyListener" type"System.Diagnost
ics.XmlWriterTraceListener"
initializeData"C\logs\ClientTraces.e2e"
traceOutputOptions"None" /gt
lt/listenersgt lt/sourcegt lt/sourcesgt lt/system.d
iagnosticsgt
85
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

86
Performance Counters
  • Slå på räknare per service
  • Kan sättas i machine.config
  • Kan analyseras på fyra nivåer
  • ServiceHost
  • Endpoint
  • Operation
  • (AppDomain)

ltconfigurationgt ltsystem.serviceModelgt
ltdiagnostics performanceCountersEnabled"true"/gt
lt/system.serviceModelgt lt/configurationgt
87
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

88
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

89
Säkerhet för meddelanden
  • Konfidentiell
  • Integritet
  • Autentisering
  • Auktorisering
  • Loggning

90
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

91
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

92
Scenarios för säkerhet
93
Scenarios för säkerhet
94
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

95
Säkerhet på transportnivå
ltendpoint address"https//localhost/calculator
" binding"basicHttpBinding"
bindingConfigurationSSLBinding"
contract"ICalculator" /gt ltbasicHttpBindinggt
ltbinding name"SSLBinding"gt ltsecurity
mode"Transport"gt lttransport
clientCredentialType"None"/gt lt/securitygt
lt/bindinggt lt/basicHttpBindinggt
96
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

97
Säkerhet på meddelandenivå
ltendpoint address"http//localhost/calculator"
bindingwsHttpBinding"
bindingConfigurationWSBinding"
contract"ICalculator" /gt ltwsHttpBindinggt
ltbinding nameWSBinding"gt ltsecurity
modeMessage"gt ltmessage clientCredentialTyp
eWindows"/gt lt/securitygt
lt/bindinggt lt/wsHttpBindinggt
98
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

99
Mixed Mode
ltendpoint address"https//localhost/calculator
" bindingwsHttpBinding"
bindingConfigurationMixedBinding"
contract"ICalculator" /gt ltwsHttpBindinggt
ltbinding nameMixedBinding"gt ltsecurity
mode TransportWithMessageCredential"gt
ltmessage clientCredentialTypeWindows"/gt
lt/securitygt lt/bindinggt lt/wsHttpBindinggt
100
Användarnamn/lösenord
Console.WriteLine(" Enter usernamedomain\\user
") string username Console.ReadLine() Console.
WriteLine(" Enter password") string password
Console.ReadLine() CalculatorProxy wsProxy
new CalculatorProxy() wsProxy.ChannelFactory.Cred
entials. UserName.UserName
username wsProxy.ChannelFactory.Credentials.
UserName.Password password
101
Impersonation
OperationBehavior( ImpersonationImpersonatio
nOption.Required) public double Sub(int a, int
b) return a - b public double Add(int
a, int b) using (ServiceSecurityContext.Curr
ent. WindowsIdentity.Impersonate())
return a b
102
PrincipalPermission
PrincipalPermission(SecurityAction.Demand,
Role"Builtin\\Administrators") public double
Mul(int a, int b) return a
b ltbehaviorsgt ltbehavior name"BuiltinSecurit
y"gt ltserviceAuthorization
principalPermissionMode"UseWindowsGroups"/gt
lt/behaviorgt lt/behaviorsgt
103
Arkitektur för dagen
Med säkerhet
104
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

105
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

106
Transaktioner
  • Delta i en transaktion

ServiceContract public interface IMyContract
OperationContract TransactionFlow(Transactio
nFlowOption.Required) bool Transfer1(Account
from, Account to, decimal amount)
OperationContract TransactionFlow(Transaction
FlowOption.NotAllowed) bool Transfer2(Account
from, Account to, decimal amount)
107
Transaktioner
  • Utvecklaren av tjänsten

public class MyService IMyContract
OperationBehavior( TransactionScopeRequired
true, TransactionAutoComplet
e true) public bool Transfer1( Account
from, Account to, decimal amount) ...
OperationBehavior( TransactionScopeRequired
true, TransactionAutoComplet
e false) public bool Transfer2( Account
from, Account to, decimal amount) ...
OperationContext.Current.SetTransactionComplete()

108
Transaktioner
  • Använda transaktioner
  • Klientsidan

TransactionScope transaction using (scope new
TransactionScope()) proxyOne.Transfer1(Account
One, AccountTwo, amount) proxyTwo.Transfer1(Acc
ountThree,AccountFour,amount)
UpdateLocalCache(AccountOne, AccountTwo,
amount) scope.Complete()
109
Transaktioner
  • Kontroll av transaktioner
  • Administratören av tjänsten

ltbindingsgt ltwsHttpBindinggt ltbinding
name"SampleBinding
transactionFlowtrue" /gt lt/bindinggt
lt/wsHttpBindinggt lt/bindingsgt
110
Arkitektur för dagen
Transaktion
111
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

112
Hur fungerar köer?
Klient
Tjänst
Queue
Queue
113
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

114
Hur köer fungerar!
Klient
Tjänst
Dead Letter Queue
Poison Queue
Queue
Queue
115
Queue Endpoint
ltendpoint address "net.msmq//MyServer/private/
MyQueue/" binding"netMsmqBinding"
bindingConfiguration "MyQueueBinding"
contract"IPurchaseOrder" /gt
116
Arkitektur för dagen
Med köhantering
117
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.Require
d) 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

118
Integrera med ASP.NET
  • Slå på i konfigurationen
  • Web.config

ltsystem.serviceModelgt ltservicesgt ltservice
name"HostedService.TallyService,
HostedService"gt ltendpoint
address"" binding"basicHttpBinding"
contract"HostedService.ITally,
HostedService"/gt lt/servicegt lt/servicesgt
ltserviceHostingEnvironment
aspNetCompatibilityEnabled"true"/gt lt/system.servi
ceModelgt
119
Integrera med ASP.NET
  • På klientsidan

ltsystem.serviceModelgt ltclientgt ltendpoint
name"TallyService"
address"http//x.se/TallyService/Service.svc"
binding"customBinding
bindingConfiguration"AllowCookieBinding"
contract"HostedService.ITally, Client"/gt
lt/clientgt ltbindingsgt ltcustomBindinggt
ltbinding name"AllowCookieBinding"gt
lthttpTransport allowCookies"true"/gt
lt/bindinggt lt/customBindinggt
lt/bindingsgt lt/system.serviceModelgt
120
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?

121
RoleProvider
public 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)
122
Arkitekturen
  • Din kod
  • Konfiguration
  • Val av lagring och administration

PrincipalPermissionAttribute(
SecurityAction.Demand, Role"Supervisor") public
void MyMethod(string input) ...
ltsystem.webgt ltroleManager enabled"true
defaultProvider"AuthorizationManagerRoleProvider"
gt ltprovidersgt ltadd name"AuthorizationMa
nagerRoleProvider" type"AuthorizationMana
gerRoleProvider, Service"
description"Role Provider to Authorization
Manager" store"msxml//C\apps\RoleProvid
er\AuthorizationStore.xml"
applicationName"RoleProvider"/gt
lt/providersgt lt/roleManagergt lt/system.webgt
123
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

124
(No Transcript)
125
http//blogs.msdn.com/johanl
  • johan.lindfors_at_microsoft.com
Write a Comment
User Comments (0)
About PowerShow.com