2011-02-01 78 views
0

我正在使用RIA Services開發Silverlight 4應用程序,並且我有RIA Services SP1 Beta工具。如何更改Silverlight RIA服務的名稱空間 - 刪除tempuri.org

在Fiddler檢查時,它會出現我的域服務位於命名空間http://tempuri.org中。

我想控制命名空間。是否可以將http://tempuri.org替換爲對我的組織更有意義的內容?

+0

[如何從您的服務WSDL中刪除tempuri.org](http://blogs.msdn.com/b/rjacobs/archive/2011/05/12/how-to-eliminate-tempuri-org - 從 - 您 - 服務,wsdl.aspx) – 2011-07-28 21:25:15

回答

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" %>