Beruflich Dokumente
Kultur Dokumente
WCF Behaviors
[ServiceContract]
public interface IComplexCalc
{
[OperationContract]
int Add(int a, int b);
[OperationContract]
ComplexNumber ComplexAdd(ComplexNumber a,
ComplexNumber b);
}
[DataContract]
public class ComplexNumber
{
[DataMember]
public int Real { get; set; }
[DataMember]
public int Imaginary { get; set; }
}
Service Implementation Considerations
An endpoint is a combination of
Address
Binding
Contract
Client-Server Communication Via Messages
Message
Messages Are Exchanged Between Endpoints
Client Service
Endpoint
Client Service
A B C
C B A Message A B C
Client Service
Reliable Reliable
Messaging Messaging
B B
I Security Security I
N N
D D
I I
N Encoding Encoding N
G G
Transport Transport
Binding Elements
Binding Element
Binding
HTTP Text Security Reliability Transactions
Custom
Custom Custom
Binding Elements Are Channels
Security Security
Encoding Encoding
TX TX
Transport
Predefined Bindings and Custom Bindings
Binding Summary
<bindings>
<basicHttpBinding>
<binding name="NoCookies"
sendTimeout="00:10:00"
allowCookies="false">
<security mode="Transport"></security>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="bigMessagesWithTransaction"
sendTimeout="00:10:00"
maxReceivedMessageSize="1048576"
transactionFlow="true">
<security mode="Message"></security>
</binding>
</netTcpBinding>
</bindings>
Configuring Binding in Code
BasicHttpBinding NoCookiesBinding =
new
BasicHttpBinding(BasicHttpSecurityMode.Transport)
{
AllowCookies = false,
SendTimeout = TimeSpan.FromMinutes(10)
};
NetTcpBinding bigMessagesWithTransactionBinding =
new NetTcpBinding(SecurityMode.Message)
{
SendTimeout = TimeSpan.FromMinutes(10),
MaxReceivedMessageSize = 1048576
};
Creating a Custom Binding
<customBinding>
<binding name="MyBinding"
sendTimeout="00:10:00">
<transactionFlow/>
<reliableSession ordered="true"/>
<security authenticationMode=
"AnonymousForCertificate"/>
<binaryMessageEncoding/>
<tcpTransport transferMode=
"StreamedResponse"/>
</binding>
</customBinding>
Defining an Endpoint
<services>
<service name="Calculators.ComplexCalc">
<endpoint address="http://localhost:8080/complex"
binding="basicHttpBinding"
contract="calculators.IComplexCalc"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="limitCalls">
<serviceThrottling maxConcurrentCalls="10"/>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug
includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<service name="Calculators.ComplexCalc"
behaviorConfiguration="limitCalls">
<endpoint>. . .</endpoint>
</service>
Defining Behaviors in Code
Developer Administrator
Instancing Throttling
Concurrency Security credentials
Serialization Exposing metadata
[ServiceBehavior(InstanceContextMode =
InstanceContextMode.PerSession)]
public class ComplexCalc : IComplexCalc {. . .}
Lesson 4: Consuming WCF Services
var i = prox.Add(2,3);
Add Add
Sub Sub
5 2+3
Mul Mul
Div Div
Adding a Service Reference
Add service
reference
Create a ChannelFactory<T>
Create a channel
Logon information
Password Pa$$w0rd
Best Practices