如何为WCF Ria服务添加JSONP端点以启用跨域呼叫?

问题描述:

我知道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

我只需要做到这一点 - 我重写了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

注释的格式不是很好,所以为了将来的参考,这里是所需的使用和装配。

非常感谢,这正是我所需要的供以后参考,这些都是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