2012-01-11 55 views
1

我知道WCF RIA Services有一個Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory,可以用來啓用JSON。 我需要通過JSONP啓用跨域調用。是否有一個現有的DomainServiceEndpointFactory可以實現這一點?如何爲WCF Ria服務添加JSONP端點以啓用跨域呼叫?

+0

的的WebHttpBinding的crossDomainScriptAccessEnabled屬性是需要啓用的。當EndPointFactory創建服務實例時,是否有一種方法可以處理這種情況? – JJS 2012-01-13 04:34:49

回答

1

我只需要做到這一點 - 我重寫了JsonEndpointFactory,並用那裏的綁定修飾,然後使用新類添加了一個端點。

namespace Bodge 
{ 
    public class JsonPEndpointFactory : JsonEndpointFactory 
    { 
     public override IEnumerable<ServiceEndpoint> CreateEndpoints(DomainServiceDescription description, DomainServiceHost serviceHost) 
     { 
      IEnumerable<ServiceEndpoint> endPoints = base.CreateEndpoints(description, serviceHost); 
      foreach (ServiceEndpoint endPoint in endPoints) 
      { 
       if (endPoint.Binding is WebHttpBinding) 
       { 
        ((WebHttpBinding)endPoint.Binding).CrossDomainScriptAccessEnabled = true; 
       } 
      } 

      return endPoints; 
     } 
    } 
} 

    <endpoints> 
    <add name="JSONP" type="Bodge.JsonPEndpointFactory, Bodge, Version=1.0.0.0"/> 
    </endpoints> 

然後通過端點和回調查詢參數訪問您的服務,例如, http://blah/service.svc/JSONP/GetStuff?callback=callbackname

希望有幫助, 克里斯。

+0

非常感謝,這正是我所期待的。 – JJS 2012-01-26 17:46:11

1

註釋的格式不是很好,所以爲了將來的參考,這裏是所需的使用和裝配。

非常感謝,這正是我所需要的供以後參考,這些都是using語句:

命名空間:

using System.Web; 
using System.ServiceModel; 
using System.ServiceModel.Description; 
using System.ServiceModel.DomainServices.Hosting; 
using System.ServiceModel.DomainServices.Server; 
using Microsoft.ServiceModel.DomainServices.Hosting; 

大會

NETFX 4.0

System.ServiceModel 
System.ServiceModel.Web 

WCF RIA Services V1.0 SP2 RC

System.ServiceModel.DomainServices.Hosting 
System.ServiceModel.DomainServices.Server 

WCF RIA Services Toolkit (September 2011)

Microsoft.ServiceModel.DomainServices.Hosting