| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Dispatcher
- {
- using System.ServiceModel.Channels;
- using System.ServiceModel;
- using System.ServiceModel.Description;
- using System.Collections.ObjectModel;
- using System.Collections.Generic;
- [ObsoleteAttribute ("PeerChannel feature is obsolete and will be removed in the future.", false)]
- class PeerValidationBehavior : IEndpointBehavior, IServiceBehavior
- {
- public static PeerValidationBehavior Instance
- {
- get
- {
- if (instance == null)
- instance = new PeerValidationBehavior();
- return instance;
- }
- }
- static PeerValidationBehavior instance;
- PeerValidationBehavior() { }
- static bool IsRequestReplyContract(ContractDescription contract)
- {
- bool requestReply = false;
- foreach (OperationDescription operation in contract.Operations)
- {
- if (operation.Messages.Count > 1) // Request-reply
- {
- requestReply = true;
- break;
- }
- }
- return requestReply;
- }
- void IEndpointBehavior.Validate(ServiceEndpoint serviceEndpoint)
- {
- if (serviceEndpoint == null)
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serviceEndpoint");
- ContractDescription contract = serviceEndpoint.Contract;
- Binding binding = serviceEndpoint.Binding;
- ValidateHelper(contract, binding);
- }
- void IEndpointBehavior.AddBindingParameters(ServiceEndpoint serviceEndpoint, BindingParameterCollection bindingParameters)
- {
- }
- void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
- {
- }
- void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
- {
- }
- void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection parameters)
- {
- }
- void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
- {
- }
- void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase)
- {
- if (description == null)
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("description");
- for (int i = 0; i < description.Endpoints.Count; i++)
- {
- ServiceEndpoint endpoint = description.Endpoints[i];
- ValidateHelper(endpoint.Contract, endpoint.Binding);
- }
- }
- // SM doesn't support request-reply message pattern over multi-point channels correctly, so, disabling
- // request-reply for NetPeerTcpBinding. (Advanced users may find a way to implement request-reply over
- // a CustomBinding that includes PeerTransportBE.)
- void ValidateHelper(ContractDescription contract, Binding binding)
- {
- if (binding is NetPeerTcpBinding && IsRequestReplyContract(contract))
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
- SR.GetString(SR.BindingDoesnTSupportRequestReplyButContract1, binding.Name)));
- }
- }
- }
- }
|