如何为WCF Ria Services添加JSON端点以启用跨域调用?

时间:2012-01-11 17:18:26

标签: jsonp wcf-ria-services

我知道WCF RIA Services有一个可以用来启用JSON的Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory。 我需要通过JSONP启用跨域调用。是否存在可以实现此目的的DomainServiceEndpointFactory?

2 个答案:

答案 0 :(得分: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

希望有所帮助, 克里斯。

答案 1 :(得分:1)

评论中的格式不是很好,因此将来参考是必需的使用和装配。

非常感谢,这正是我所需要的!为了将来参考,这些是使用声明:

命名空间:

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