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