6

Temel erişim kimlik doğrulaması kullanan bir WCF SOAP servisine sahibim. SSL kullanılmıyor - Burada güvenlik sorunlarını anlıyorum.Temel Referans ile Hizmet Referansı Nasıl Kullanılır WCF SOAP Servisi

WCFTestClient uygulamasını kullanma Servisin, Authorization başlığı bulunmadığında kullanılacak kullanıcı adı ve parolayı geçici olarak kodlayarak hizmetlerin çalıştığını doğruladım.

Şimdi kimlik bilgilerini Authorization üstbilgisini kullanarak geçen bir sınama uygulaması yazmaya çalışıyorum. Test uygulamamda hizmetime bir hizmet referansı ekledim, ancak Authorization başlığı http isteğinde mevcut değil. oluşturulan MyServiceClient sınıf aşağıdaki gibi ben de denedim

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

şöyle ı kimlik kuruyorum benim test uygulamasında System.ServiceModel.ClientBase

kullanır

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); 

şöyle hizmet web.config olduğunu
<services> 
    <service name="MyService" behaviorConfiguration="MyBehavior" > 
    <endpoint contract="MyService" binding="basicHttpBinding" /> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
    </service> 
</services> 

Test app.config dosyası 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> 

Eksik olduğum hakkında herhangi bir düşünce var mı?

+0

Gönderilmesi gereken örnek xml'yi gösterebilir misiniz? –

+0

Temel kimlik doğrulamayı kullandığımdan nasıl yardımcı olabileceğinden emin değilim. WCF, tüm serileştirmeyi XML'e gönderir ve ben asla üretmem. Ti'nin yardımcı olabileceğini düşünüyorsanız, WireShark'tan bir çöplük alıp deneyebilirim. –

+0

Hizmetiniz ya da başka birinin servisine SOAP göndermeye mi çalışıyorsunuz? –

cevap

1

Bu iyi bir başlangıç ​​noktası, senin bağlama taşımak ve sınıfınıza yapılandırma dosyasından uç nokta bilgisi geçerli:

 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"); 

ve sonra

MyServiceClient client = new MyServiceClient(binding, endpont); 

bu deneyin ve ihtiyaçlarınıza içine bağlayıcı çimdik özellikle "Güvenlik".

+1

Yapılandırmanın taşınması hiçbir şeyi değiştirmemelidir. Bu aslında kimlik bilgilerini nasıl gönderir? – StingyJack

2

BasicHttpBinding, WP8'de bir Güvenlik Özelliğine sahip görünmüyor, WP8 altındaki bir paylaşım listesine erişmeye çalışmaktan dolayı çok sinirliyim. Xamarin IOS/Android sorun değil.