如何为WCF Ria服务添加JSONP端点以启用跨域呼叫?
问题描述:
我知道WCF RIA Services有一个Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory,可以用来启用JSON。 我需要通过JSONP启用跨域调用。是否有一个现有的DomainServiceEndpointFactory可以实现这一点?如何为WCF Ria服务添加JSONP端点以启用跨域呼叫?
答
我只需要做到这一点 - 我重写了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
System.ServiceModel.DomainServices.Hosting
System.ServiceModel.DomainServices.Server
WCF RIA Services Toolkit (September 2011)
Microsoft.ServiceModel.DomainServices.Hosting
的的WebHttpBinding的crossDomainScriptAccessEnabled属性是需要启用的。当EndPointFactory创建服务实例时,是否有一种方法可以处理这种情况? – JJS 2012-01-13 04:34:49