6

Tengo un servicio WCF SOAP que usa autenticación de acceso básico. No se usa SSL: entiendo los problemas de seguridad aquí.Cómo usar una referencia de servicio con una autenticación básica WCF SOAP Service

Utilizando la aplicación WCFTestClient he verificado que el servicio funciona mediante la codificación temporal en el servicio de un nombre de usuario y contraseña para usar cuando el encabezado Authorization no está presente.

Ahora estoy tratando de escribir una aplicación de prueba que pase las credenciales a través del encabezado Authorization. Agregué una referencia de servicio a mi servicio en mi aplicación de prueba, pero el encabezado Authorization no está presente en la solicitud http. El MyServiceClient clase generada utiliza System.ServiceModel.ClientBase

En mi aplicación de prueba estoy fijando las credenciales de la siguiente manera

MyServiceClient client = new MyServiceClient("BasicHttpBinding_MyService"); 
client.ClientCredentials.UserName.UserName = "WebServiceUsername"; 
client.ClientCredentials.UserName.Password = "WebServicepassword"; 

También he tratado de la siguiente manera

MyServiceClient client = new MyServiceClient(); 
ClientCredentials loginCredentials = new ClientCredentials(); 
loginCredentials.UserName.UserName = "WebServiceUsername"; 
loginCredentials.UserName.Password = "WebServicepassword"; 
client.Endpoint.Behaviors.Remove(client.Endpoint.Behaviors.Find<ClientCredentials>()); 
client.Endpoint.Behaviors.Add(loginCredentials); 

el web.config servicio es el siguiente

<services> 
    <service name="MyService" behaviorConfiguration="MyBehavior" > 
    <endpoint contract="MyService" binding="basicHttpBinding" /> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
    </service> 
</services> 

The test app.config es como sigue ws

<configuration> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_MyService"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:55314/MyService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyService" 
     contract="MyService" name="BasicHttpBinding_MyService" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

¿Alguna idea de lo que me falta?

+0

¿puede mostrar la muestra xml que debe enviarse? –

+0

No estoy seguro de cómo esto podría ayudar, ya que estoy usando la autenticación básica. WCF está entregando toda la serialización hacia y desde XML, nunca la genero. Puedo intentar obtener un archivo de WireShark si crees que podrías ayudar. –

+0

¿Es su servicio o está intentando enviar SOAP al servicio de otra persona? –

Respuesta

1

Este es un buen punto de partida, mueva su unión y la información de punto final del archivo de configuración a su clase:

 protected BasicHttpBinding binding = new BasicHttpBinding() 
     { 
      Name = "Name your binding here", 
      CloseTimeout = new TimeSpan(0, 1, 0), 
      OpenTimeout = new TimeSpan(0, 1, 0), 
      ReceiveTimeout = new TimeSpan(0, 10, 0), 
      SendTimeout = new TimeSpan(0, 1, 0), 
      AllowCookies = false, 
      BypassProxyOnLocal = false, 
      HostNameComparisonMode = HostNameComparisonMode.StrongWildcard, 
      MaxBufferSize = 65536, 
      MaxBufferPoolSize = 524288, 
      MaxReceivedMessageSize = 65536, 
      MessageEncoding = WSMessageEncoding.Text, 
      TransferMode = TransferMode.Buffered, 
      UseDefaultWebProxy = true, 
      Security = new BasicHttpSecurity() 
      { 
      Mode = BasicHttpSecurityMode.Transport, 
      Message = new BasicHttpMessageSecurity() { AlgorithmSuite = SecurityAlgorithmSuite.Default, ClientCredentialType = BasicHttpMessageCredentialType.UserName}, 
      Transport = new HttpTransportSecurity() { ClientCredentialType = HttpClientCredentialType.Digest } 
      }, 
     }; 
     protected EndpointAddress endPoint = new EndpointAddress("http://localhost:55314/MyService.svc"); 

y luego

MyServiceClient client = new MyServiceClient(binding, endpont); 

probar esto, y ajustar la unión a sus necesidades , especialmente "Seguridad".

+1

Mover la configuración no debería cambiar nada. ¿Cómo envía esto realmente las credenciales? – StingyJack

2

BasicHttpBinding no parece tener una propiedad de seguridad en WP8, estoy muy frustrado al tratar de acceder a una lista de SharePoint en WP8. Xamarin IOS/Android no es problema.

Cuestiones relacionadas