2011-02-01 3 views
0

RIAサービスを使用してSilverlight 4アプリケーションを開発しています.RIA Services SP1 Betaツールがあります。Silverlight RIA Serviceのネームスペースを変更する方法 - tempuri.orgを削除する

Fiddlerの検査の結果、私のドメインサービスがネームスペース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" %> 
関連する問題