2011-02-01 2 views
0

RIA Services를 사용하여 Silverlight 4 응용 프로그램을 개발 중이며 RIA Services SP1 Beta 도구가 있습니다.Silverlight RIA Service의 네임 스페이스를 변경하는 방법 - tempuri.org를 제거하십시오.

피들러의 검사를 통해 내 도메인 서비스가 네임 스페이스 http://tempuri.org에있는 것으로 나타납니다.

네임 스페이스를 제어하고 싶습니다. 내 조직에 더 의미있는 것을 위해 http://tempuri.org을 교환 할 수 있습니까?

+0

(http://blogs.msdn.com/b/rjacobs/archive/2011/05/12/how-to-eliminate-tempuri-org [서비스 WSDL에서 tempuri.org을 제거하는 방법] -from-your-service-wsdl.aspx) –

답변

0

SOAP 지원 DomainServiceHost에서 기본 네임 스페이스의 모든 마지막 인스턴스를 검색했습니다. 나는 아직도 일부를 놓치고 있지만, 내가 발견 한 것들이있다. 아,이 코드는 끝점을 https로 제한하고 메타 데이터 생성을 차단합니다.

using System.ServiceModel.DomainServices.Hosting; 
using System; 
using System.Linq; 
using System.ServiceModel; 
using System.ServiceModel.Description; 
using System.Collections.Generic; 
namespace mySite.Web.Models 
{ 
    public class DomainServiceHostFactoryEx : DomainServiceHostFactory 
    { 
     protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
     { 
      return new DomainServiceHostEx(serviceType, baseAddresses.Where(x => x.AbsoluteUri.StartsWith("https")).ToArray()); 
     } 
    } 
    public class DomainServiceHostEx : DomainServiceHost 
    { 
     public DomainServiceHostEx(Type domainServiceType, params Uri[] baseAddresses) : base(domainServiceType, baseAddresses) 
     { 
      foreach (KeyValuePair<string, ContractDescription> currentContract in this.ImplementedContracts) 
      { 
       currentContract.Value.Namespace = "http://myWebSite.com/"; 
       foreach (OperationDescription currentDescription in currentContract.Value.Operations) 
       { 
        currentDescription.DeclaringContract.Namespace = "http://myWebSite.com/"; 
        foreach (OperationDescription innerCurrentDescription in currentDescription.DeclaringContract.Operations) 
        { 
         foreach (FaultDescription innerCurrentFaultDescription in innerCurrentDescription.Faults) 
         { 
          innerCurrentFaultDescription.Action.Replace("http://tempuri.org", "http://myWebSite.com/"); 
         } 
         foreach (MessageDescription innerCurrentFaultDescription in innerCurrentDescription.Messages) 
         { 
          innerCurrentFaultDescription.Action.Replace("http://tempuri.org", "http://myWebSite.com/"); 
         } 
        } 
        foreach (FaultDescription currentFaultDescription in currentDescription.Faults) 
        { 
         currentFaultDescription.Action.Replace("http://tempuri.org", "http://myWebSite.com/"); 
        } 
        foreach (MessageDescription currentMessageDescription in currentDescription.Messages) 
        { 
         currentMessageDescription.Action.Replace("http://tempuri.org", "http://myWebSite.com/"); 
        } 
       } 
      } 
     } 
     protected override void AddDefaultBehaviors() 
     { 
      base.AddDefaultBehaviors(); 
      this.Description.Behaviors.Find<ServiceMetadataBehavior>().HttpsGetEnabled = false; 
      this.Description.Namespace = "http://myWebSite.com/"; 
     } 
    } 
} 

그리고 당신은 루트 디렉토리 또는 내부에 다음 코드로 서비스 엔드 포인트 (즉, /Services/mySite-Web-Models-myDomainService.svc)와 서비스 폴더에서 SVC는 파일을 생성해야합니다 :

<%@ ServiceHost Service="mySite.Web.Models.myDomainService" 
       Factory="mySite.Web.Models.DomainServiceHostFactoryEx" %> 
관련 문제