2011-08-18 1 views
0

다음 코드를 사용하여 구현해야합니다.프로그래밍 방식으로 WCF 바인딩을 구성하는 방법

<basicHttpBinding> 

     <binding name="NewBinding"> 

      <security mode="TransportCredentialOnly"> 

      <transport clientCredentialType="Basic" /> 

      </security> 

     </binding> 

     </basicHttpBinding> 

사용할 수있는 샘플이 있습니까? 나는 WCF REST 서비스와 수동으로 경로를 등록하고있다. 이 구성을 구성에 배치하면 작동하지 않습니다. 가능하다면 프로그래밍 방식으로 설치하고 싶습니다. 또한 코드의 어느 시점에서해야합니까?

EDIT :

내 서비스는 Global.asax에서 다음과 같이 라우팅됩니다.

foreach (var account in cmc.Accounts.Where(aa => aa.IsActive).ToList()) 
       { 
        RouteTable.Routes.Add(
         new ServiceRoute(
          account.AccountId + "/mobile", new MyServiceHostFactory(), typeof(MobileService))); 
       } 

그리고 내 ServiceHost

public class MyServiceHost : WebServiceHost 
    { 
     private readonly Type _serviceType; 
     private readonly CompositionContainer _container; 

     public MyServiceHost(Type serviceType, CompositionContainer container, params Uri[] baseAddresses) 
      : base(serviceType, baseAddresses) 
     { 
      _serviceType = serviceType; 
      _container = container; 
     } 

     protected override void OnOpening() 
     { 
      if (Description.Behaviors.Find<MyServiceBehavior>() == null) 
      { 
       Description.Behaviors.Add(new MyServiceBehavior(_serviceType, _container)); 
      } 

      base.OnOpening(); 
     } 
    } 
+0

@ http://stackoverflow.com/questions/835613/wcf-how-can-i-programatically-recreate-these-app-config-values ​​ –

+0

해당 게시물은 ASP.NET에서 호스팅 될 때 해당 코드를 사용하는 방법을 설명하지 않습니다. 맞춤 ServiceHost 및 ServiceHostProvider가 있습니다. 이상적으로 거기에 갈 필요가있다. – katit

답변

1

foreach (var account in cmc.Accounts.Where(aa => aa.IsActive).ToList()) 
       { 
        RouteTable.Routes.Add(
         new ServiceRoute(
          account.AccountId + "/mobile", new MyServiceHostFactory(), typeof(MobileService))); 
       } 

, 바인딩에 해당하는이입니다 다음 :

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 
+0

카를로스, 내 바인딩에이 바인딩을 삽입하려면 어떻게해야합니까? – katit

+0

서비스 계약 유형 (일반적으로 인터페이스), 바인딩 및 주소를 취하는'ServiceHost.AddServiceEndpoint' 메소드를 사용할 수 있습니다. 경로를 사용하려면 호스트에 대한 참조를 얻을 수있는'ServiceHostFactory'가 필요합니다. 공장에 대한 자세한 내용은 http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/wcf-extensibility-servicehostfactory.aspx – carlosfigueira

+0

내 게시물에 EDIT를 추가했습니다. 이런 종류의 설정이이 바인딩을 어떻게 추가합니까? 내 코드 어디에서? – katit