2010-07-13 5 views
0

J'ai un service WCF que j'ai besoin d'appeler. Quand je vais à « ajouter une référence de service » dans VS, je me suivais config client:Comment désactiver la sécurité sur le CustomBinding d'un WCF via le code?

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <customBinding> 
       <binding name="CustomBinding_IMyService"> 
        <binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
         maxSessionSize="2048"> 
         <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
          maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        </binaryMessageEncoding> 
        <httpTransport manualAddressing="false" maxBufferPoolSize="524288" 
         maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" 
         bypassProxyOnLocal="false" decompressionEnabled="true" 
         hostNameComparisonMode="StrongWildcard" 
         keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" 
         realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
         useDefaultWebProxy="true" /> 
       </binding> 
      </customBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://myserver/Service/MyService.svc" 
       binding="customBinding" bindingConfiguration="CustomBinding_IMyService" 
       contract="MyService.IMyService" name="CustomBinding_IMyService" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Quand j'appelle le service à l'aide de cette configuration, il fonctionne, de sorte que le service est bien. Mais dans mon application actuelle, je ne peux pas utiliser app.config, et j'ai besoin de construire le client de service en code. J'ai essayé de faire une traduction simple:

var binaryMessageEncoding = new BinaryMessageEncodingBindingElement(); 
var httpTransport = new HttpsTransportBindingElement() 
         { 
          Realm = "", ManualAddressing = false, 
          HostNameComparisonMode = HostNameComparisonMode.StrongWildcard, 
          TransferMode = TransferMode.Buffered, 
          MaxBufferSize = int.MaxValue, 
          MaxReceivedMessageSize = int.MaxValue, AllowCookies = false, 
          AuthenticationScheme = AuthenticationSchemes.Anonymous, 
          UnsafeConnectionNtlmAuthentication = false 
         }; 
var customBinding = new CustomBinding(binaryMessageEncoding, httpTransport); 
var myServiceClient = new MyServiceClient(customBinding, 
                new EndpointAddress(
                 "http://myserver/Service/MyService.svc")); 

Mais quand je l'appelle le service, je reçois ArgumentException qui dit "The provided URI scheme 'http' is invalid; expected 'https'.", de sorte que le je contraignant construit pour une raison quelconque pense qu'il doit être sûr ... Donc, maintenant nous sont de retour à la question d'origine - comment désactiver la sécurité sur un code CustomBinding? Je sais que dans la configuration c'est un simple <security mode="none"/>, mais je ne peux pas utiliser la config, et pour une raison quelconque, je n'ai pas pu trouver l'API équivalente.

Répondre

2

D'après ce que je vois, vous instancier un objet HttpsTransportBindingElement. Vous pouvez utiliser un objet HttpTransportBindingElement à la place.

L'objet HttpsTransportBindingElement requiert implicitement la sécurité SSL qui est la raison pour laquelle vous obtenez un ArgumentException qui dit "The provided URI scheme 'http' is invalid; expected 'https'."

+0

Merci! (Comment pourrais-je me manquer moi-même? ... Jeez.) – user8032

1

Vous ar en utilisant HttpsTransportBindingElement vous devez utiliser à la place HttpTransportBindingElement

Questions connexes