<Custombinding>
Zapewnia pełną kontrolę nad stosem komunikatów dla użytkownika.
<Konfiguracji>
<System.servicemodel>
<Powiązania>
<Custombinding>
Składnia
<customBinding>
<binding name="String"
closeTimeout="TimeSpan"
openTimeout="TimeSpan"
receiveTimeout="TimeSpan"
sendTimeout="TimeSpan">
<compositeDuplex clientBaseAddress="Uri" />
<reliableSession acknowledgementInterval="TimeSpan"
advancedFlowControl="Boolean"
bufferedMessagesQuota="Integer"
inactivityTimeout="TimeSpan"
maxPendingChannels="Integer"
maxRetryCount="Integer"
ordered="Boolean" />
<pnrpPeerResolver />
<windowsStreamSecurity protectionLevel="None/Sign/EncryptAndSign" />
<sslStreamSecurity requireClientCertificate="Boolean" />
<transactionFlow transactionProtocol="OleTransactions/WSAtomicTransactionOctober2004" />
<security defaultAlgorithmSuite="Basic128/Basic192/Basic256/Basic128Rsa15/Basic256Rsa15/TripleDes/TripleDesRsa15/Basic128Sha256/Basic192Sha256/TripleDesSha256/Basic128Sha256Rsa15/Basic192Sha256Rsa15/Basic256Sha256Rsa15/TripleDesSha256Rsa15"
authenticationMode="UserNameForAnonymous"
contextMode="Cookie"
defaultProtectionLevel="Sign"
enableKeyDerivation="false"
keyEntropyMode="ClientEntropy"
messageProtectionOrder="SignBeforeEncryptAndEncryptSignature"
securityVersion="WSSecurityXXX2005">
<localClientSettings cacheCookies="false"
detectReplays="false"
maxCookieCachingTime="00:07:24" />
<localServiceSettings replayCacheSize="9"
maxClockSkew="00:00:03"
replayWindow="00:07:22.2190000" />
</security>
<binaryMessageEncoding maxReadPoolSize="Integer"
maxWritePoolSize="Integer"
maxSessionSize="Integer" />
<httpsTransport manualAddressing="Boolean"
maxMessageSize="Integer"
authenticationScheme="Negotiate"
bypassProxyOnLocal="Boolean"
hostNameComparisonMode="Exact"
mapAddressingHeadersToHttpHeaders="Boolean"
proxyaddress="Uri"
realm="String"
requireClientCertificate="Boolean" />
<peerTransport manualAddressing="false"
maxMessageSize="20002"
listenIPAddress="202.10.1.9"
messageAuthentication="false"
peerNodeAuthenticationMode="None"
port="1000" />
<security defaultAlgorithmSuite="Basic128/Basic192/Basic256/Basic128Rsa15/Basic256Rsa15/TripleDes/TripleDesRsa15/Basic128Sha256/Basic192Sha256/TripleDesSha256/Basic128Sha256Rsa15/Basic192Sha256Rsa15/Basic256Sha256Rsa15/TripleDesSha256Rsa15"
authenticationMode="UserNameForAnonymous"
bootstrapBindingConfiguration="String"
bootstrapBindingSectionName="String"
defaultProtectionLevel="None/Sign/EncryptAndSign"
requireDerivedKeys="Boolean"
securityHeaderLayout="Strict/Lax/LaxTimestampFirst/LaxTimestampLast"
includeTimestamp="Boolean"
keyEntropyMode="ClientEntropy/ServerEntropy/CombinedEntropy"
messageProtectionOrder="SignBeforeEncrypt/SignBeforeEncryptAndEncryptSignature/EncryptBeforeSign"
protectTokens="Boolean"
requireSecurityContextCancellation="Boolean"
securityVersion=" WSSecurityJan2004/WSSecurityXXX2005"
requireSignatureConfirmation="Boolean">
<localClientSettings cacheCookies="Boolean"
detectReplays="Boolean"
replayCacheSize="Integer"
maxClockSkew="TimeSpan"
maxCookieCachingTime="TimeSpan"
replayWindow="TimeSpan"
sessionKeyRenewalInterval="TimeSpan"
sessionKeyRolloverInterval="TimeSpan"
reconnectOnTransportFailure="Boolean"
timestampValidityDuration="TimeSpan"
cookieRenewalThresholdPercentage="Integer" />
<localServiceSettings detectReplays="Boolean"
issuedCookieLifeTime="TimeSpan"
maxStatefulNegotiations="Integer"
replayCacheSize="Integer"
maxClockSkew="TimeSpan"
negotiationTimeout="TimeSpan"
replayWindow="TimeSpan"
inactivityTimeout="TimeSpan"
sessionKeyRenewalInterval="TimeSpan"
sessionKeyRolloverInterval="TimeSpan"
reconnectOnTransportFailure="Boolean"
maxConcurrentSessions="Integer"
timestampValidityDuration="TimeSpan" />
<federationParameters trustVersion="WSTrustApr2004/WSTrustFeb2005" />
</security>
<security defaultAlgorithmSuite="Basic128/Basic192/Basic256/Basic128Rsa15/Basic256Rsa15/TripleDes/TripleDesRsa15/Basic128Sha256/Basic192Sha256/TripleDesSha256/Basic128Sha256Rsa15/Basic192Sha256Rsa15/Basic256Sha256Rsa15/TripleDesSha256Rsa15"
authenticationMode="UserNameForAnonymous"
bootstrapBindingConfiguration="String"
bootstrapBindingSectionName="String"
defaultProtectionLevel="None/Sign/EncryptAndSign"
requireDerivedKeys="Boolean"
securityHeaderLayout="Strict/Lax/LaxTimestampFirst/LaxTimestampLast"
includeTimestamp="Boolean"
keyEntropyMode="ClientEntropy/ServerEntropy/CombinedEntropy"
messageProtectionOrder="SignBeforeEncrypt/SignBeforeEncryptAndEncryptSignature/EncryptBeforeSign"
protectTokens="Boolean"
requireSecurityContextCancellation="Boolean"
securityVersion=" WSSecurityJan2004/WSSecurityXXX2005"
requireSignatureConfirmation="Boolean" >
<localClientSettings cacheCookies="Boolean"
detectReplays="Boolean"
replayCacheSize="Integer"
maxClockSkew="TimeSpan"
maxCookieCachingTime="TimeSpan"
replayWindow="TimeSpan"
sessionKeyRenewalInterval="TimeSpan"
sessionKeyRolloverInterval="TimeSpan"
reconnectOnTransportFailure="Boolean"
timestampValidityDuration="TimeSpan"
cookieRenewalThresholdPercentage="Integer" />
<localServiceSettings detectReplays="Boolean"
issuedCookieLifeTime="TimeSpan"
maxStatefulNegotiations="Integer"
replayCacheSize="Integer"
maxClockSkew="TimeSpan"
negotiationTimeout="TimeSpan"
replayWindow="TimeSpan"
inactivityTimeout="TimeSpan"
sessionKeyRenewalInterval="TimeSpan"
sessionKeyRolloverInterval="TimeSpan"
reconnectOnTransportFailure="Boolean"
maxConcurrentSessions="Integer"
timestampValidityDuration="TimeSpan" />
<federationParameters trustVersion="WSTrustApr2004/WSTrustFeb2005" />
<genericIssuedTokenParameters>
<localIssuerIssuedTokenParameters keyType="SymmetricKey/PublicKey"
keySize="Integer"
tokenType="String" />
<issuedTokenParametersEndpointAddress address="URI"
bindingConfiguration="String"
binding="String" />
<issuedTokenClient localIssuerChannelBehaviors="String"
cacheIssuedTokens="Boolean"
maxIssuedTokenCachingTime="TimeSpan"
keyEntropyMode="ClientEntropy/ServerEntropy/CombinedEntropy" />
<issuedTokenClientBehavior issuerAddress="String"
behaviorConfiguration="String" />
<issuedTokenClientBehavior address="URI"
bindingConfiguration="String"
binding="String" />
</genericIssuedTokenParameters>
</security>
</binding>
</customBinding>
Atrybuty i elementy
W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne
Atrybuty
Atrybut | Opis |
---|---|
closeTimeout | TimeSpan Wartość określająca interwał czasu podany dla operacji zamknięcia do ukończenia. Ta wartość powinna być większa lub równa Zero. Wartość domyślna to 00:01:00. |
name | Ciąg zawierający nazwę konfiguracji powiązania. Ta wartość jest ciągiem zdefiniowanym przez użytkownika, który działa jako ciąg identyfikacyjny powiązania niestandardowego. Począwszy od .NET Framework 4, powiązania i zachowania nie muszą mieć nazwy. Aby uzyskać więcej informacji na temat domyślnej konfiguracji i bez nazw powiązań i zachowań, zobacz Uproszczona konfiguracja i Uproszczona konfiguracja dla usług WCF. |
openTimeout | TimeSpan Wartość określająca interwał czasu podany dla operacji otwierania do ukończenia. Ta wartość powinna być większa lub równa Zero. Wartość domyślna to 00:01:00. |
Receivetimeout | TimeSpan Wartość określająca interwał czasu podany dla operacji odbierania do ukończenia. Ta wartość powinna być większa lub równa Zero. Wartość domyślna to 00:01:00. |
sendTimeout | TimeSpan Wartość określająca interwał czasu podany dla operacji wysyłania do ukończenia. Ta wartość powinna być większa lub równa Zero. Wartość domyślna to 00:01:00. |
Elementy podrzędne
Element | Opis |
---|---|
<compositeDuplex> | Określa dwukierunkową obsługę komunikatów w powiązaniu niestandardowym. Jest on używany z transportami, które nie zezwalają na komunikację dwukierunkową natywnie, na przykład HTTP. Natomiast protokół TCP umożliwia natywną komunikację dwukierunkową i nie wymaga użycia tego elementu powiązania dla usługi do wysyłania komunikatów z powrotem do klienta. Klient musi uwidocznić adres usługi, aby nawiązać kontakt i nawiązać połączenie. Ten adres klienta jest dostarczany przez ClientBaseAddress atrybut .Ten element jest typu CompositeDuplexElement. |
<pnrpPeerResolver> | Określa rozpoznawanie nazw równorzędnych (PNRP) równorzędnego rozpoznawania nazw. Ten element jest typu PnrpPeerResolverElement. |
<reliableSession> | Określa ustawienie dla WS-Reliable Messaging. Po dodaniu tego elementu do powiązania niestandardowego wynikowy kanał może obsługiwać dokładnie jednokrotne zapewnienia dostarczania. Ten element jest typu ReliableSessionElement. |
<Zabezpieczeń> | Określa opcje zabezpieczeń powiązania niestandardowego. Ten element jest typu SecurityElement. |
<sslStreamSecurity> | Określa ustawienia zabezpieczeń dla powiązania strumienia SSL. Ten element jest typu SslStreamSecurityElement. |
<transactionFlow> | Określa, że powiązanie obsługuje przepływ transakcji i protokół, który ma być używany przez transactionProtocol atrybut . Ten element jest typu TransactionFlowElement. |
<windowsStreamSecurity> | Określa opcje zabezpieczeń przesyłania strumieniowego powiązania niestandardowego. Ten element jest typu WindowsStreamSecurityElement. |
Elementy nadrzędne
Element | Opis |
---|---|
powiązania | Zawiera wszystkie powiązania dla aplikacji Windows Communication Foundation. |
Uwagi
Powiązania niestandardowe zapewniają pełną kontrolę nad stosem komunikatów WCF. Można utworzyć specjalne powiązania dostosowane, dodając elementy konfiguracji dla określonych jednostek. Na przykład użytkownik może połączyć sekcję, sekcję httpsTransport
i security
sekcję, reliableSession
aby utworzyć niezawodne i bezpieczne powiązanie oparte na protokole HTTPS.
Pojedyncze powiązanie definiuje stos komunikatów, określając elementy konfiguracji dla elementów stosu w kolejności ich wyświetlania na stosie. Każdy element definiuje i konfiguruje jeden element stosu. W każdym powiązaniu niestandardowym musi istnieć jeden i tylko jeden element transportu. Bez tego elementu stos komunikatów jest niekompletny.
Kolejność wyświetlania elementów w stosie ma znaczenie, ponieważ jest to kolejność, w jakiej operacje są stosowane do komunikatu. Zalecana kolejność elementów stosu jest następująca:
Transakcje (opcjonalne)
Niezawodna obsługa komunikatów (opcjonalnie)
Zabezpieczenia (opcjonalnie)
Transport
Koder (opcjonalnie)
Użyj powiązania niestandardowego, gdy jedno z powiązań dostarczonych przez system nie spełnia wymagań usługi. Można na przykład użyć powiązania niestandardowego, aby umożliwić korzystanie z nowego transportu lub nowego kodera w punkcie końcowym usługi.
Powiązanie niestandardowe jest tworzone przy użyciu jednej z CustomBinding kolekcji elementów powiązania, które są "ułożone" w określonej kolejności:
U góry znajduje się opcjonalny element TransactionFlowBindingElement , który umożliwia przepływanie transakcji.
Następnie jest opcjonalny ReliableSessionBindingElement , który udostępnia mechanizm sesji i kolejności zgodnie z definicją w specyfikacji WS-ReliableMessaging. To pojęcie sesji może przekraczać protokół SOAP i pośredników transportowych.
Następnie jest opcjonalny element powiązania zabezpieczeń, który zapewnia funkcje zabezpieczeń, takie jak autoryzacja, uwierzytelnianie, ochrona i poufność. Następujące elementy powiązania zabezpieczeń są dostarczane przez program Windows Communication Foundation (WCF):
Poniżej przedstawiono opcjonalne wzorce komunikatów określone przez elementy powiązania:
Poniżej przedstawiono opcjonalne uaktualnienia transportu/elementy powiązania pomocników:
Następnie jest wymagany element powiązania kodowania komunikatów. Możesz użyć własnego transportu lub użyć jednego z następujących powiązań kodowania komunikatów:
Na dole znajduje się wymagany element transportu. Możesz użyć własnego transportu lub użyć jednego z elementów powiązania transportu dostarczonego przez program Windows Communication Foundation (WCF):
Poniższa tabela zawiera podsumowanie opcji dla każdej warstwy.
Warstwa | Opcje | Wymagane |
---|---|---|
Przepływ transakcji | TransactionFlowBindingElement | Nie |
Niezawodność | ReliableSessionBindingElement | Nie |
Zabezpieczenia | Symetryczne, asymetryczne, Transport-Level | Nie |
Zmiana kształtu | CompositeDuplexBindingElement | Nie |
Uaktualnienia transportu | Strumień SSL, strumień systemu Windows, rozpoznawanie równorzędne | Nie |
Encoding | Tekst, binarny, MTOM, niestandardowy | Tak |
Transport | TCP, nazwane potoki, HTTP, HTTPS, smaki MSMQ, niestandardowe | Tak |
Ponadto można zdefiniować własne elementy powiązania i wstawić je między dowolną z poprzednich zdefiniowanych warstw.
Aby zapoznać się z omówieniem sposobu używania powiązania niestandardowego do modyfikowania powiązania dostarczonego przez system, zobacz How to: Customize a System-Provided Binding (Instrukcje: dostosowywanie powiązania System-Provided).