2009-12-18 12 views
10

İki WCF RESTful hizmetim var - "genel" hizmet herkese açıktır ve güvenlik yoktur; SSL üzerinden temel kimlik doğrulamayı kullanmak istediğim "admin" servisi. Şu anda böyle bir koda sahip, müşteri tarafındaWCF'de, bir webHttpBinding için, sunucu temel kimlik doğrulaması kullanırken istemci tarafı web.config dosyasında kimlik bilgilerini nasıl belirleyebilirim?

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
      <binding name="general" maxReceivedMessageSize="2147483647"> 
       <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
       <security mode="None"> 
        <transport clientCredentialType="None" /> 
       </security> 
      </binding> 
      <binding name="admin" maxReceivedMessageSize="2147483647"> 
       <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="Basic" /> 
       </security> 
      </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
       <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
      <behavior name="web"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <services> 
     <service name="MyNamespace.AppServices.GeneralService"> 
      <endpoint address="" binding="webHttpBinding" contract="MyNamespace.Contracts.IGeneralService" behaviorConfiguration="web" bindingConfiguration="general" /> 
     </service> 
     <service name="MyNamespace.AppServices.AdminService"> 
      <endpoint address="" binding="webHttpBinding" contract="MyNamespace.Contracts.IAdminService" behaviorConfiguration="web" bindingConfiguration="admin" /> 
     </service> 
    </services> 
</system.serviceModel> 

: Bu benim sunucu tarafı web.config olduğunu Açıkçası bırakmadığınızdan istemiyorum çünkü

private static IGeneralService GetGeneralChannel() 
{ 
    WebHttpBinding binding = new WebHttpBinding(); 
    binding.Security.Mode = WebHttpSecurityMode.None; 
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
    binding.MaxReceivedMessageSize = Int32.MaxValue; 
    binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; 
    binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue; 

    WebChannelFactory<IGeneralService> cf = new WebChannelFactory<IGeneralService>(binding, new Uri("http://localhost:1066/GeneralService")); 
    IGeneralService channel = cf.CreateChannel(); 
    return channel; 
} 

private static IAdminService GetAdminChannel() 
{ 
    WebHttpBinding binding = new WebHttpBinding(); 
    binding.Security.Mode = WebHttpSecurityMode.Transport; 
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 
    binding.MaxReceivedMessageSize = Int32.MaxValue; 
    binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; 
    binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue; 

    WebChannelFactory<IAdminService> cf = new WebChannelFactory<IAdminService>(binding, new Uri("http://localhost:1066/AdminService")); 
    cf.Credentials.UserName.UserName = "myUserName"; 
    cf.Credentials.UserName.Password = "myPassword"; 

    IAdminService channel = cf.CreateChannel(); 
    return channel; 
} 

soru, Bu yapılandırma bilgilerinin tümünü kodlayın, istemcideki web.config dosyasına nasıl sağlamanız gerekir? Bağlantı elemanının sunucuda olduğu gibi istemcide hemen hemen aynı görünmesi gerektiği bana göre oldukça açık. Ancak, WebChannelFactory'ye atanan kimlik bilgilerini nerede gösteririm?

Herhangi bir yardım ve/veya içgörü takdir edilecektir.

sayesinde Steve

cevap

7

Sen web.config içine bu kimlik bilgilerini (kullanıcı adı ve şifre) koyamazsınız ve WCF oradan okudum. Bu, WCF'de yapılandırmada yapılamayan çok az özellikten biridir - bu bilgileri sizin kodunuzda belirlemelisiniz. Elbette, kodunuzda, bunları örn. Bir veritabanı tablosu veya bir yere bir giriş girişi - ancak bunu kendiniz yapmanız gerekir. WCF bu ayarları bir yerden otomatik olarak okumak için yapılandırılamaz.

+0

bu neden, her yerde etrafında kazma sonra, wcf yapılandırma şemada kullanıcı adı/şifre elemanlarına benzeyen bir şey bulamadık açıklamak olurdu - o bilgi için teşekkürler. Bu değerleri appSettings öğesinde koymak kadar kolay. –

İlgili konular