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

发布于 2024-12-26 12:29:59 字数 170 浏览 1 评论 0原文

我知道 WCF RIA 服务有一个 Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory,我可以使用它来启用 JSON。 我需要通过 JSONP 启用跨域调用。是否有现有的 DomainServiceEndpointFactory 可以完成此任务?

I'm aware that WCF RIA Services has a Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory that I can use to enable JSON.
I need to enable cross-domain calls via JSONP. Is there an existing DomainServiceEndpointFactory that will accomplish this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笛声青案梦长安 2025-01-02 12:29:59

我只需要这样做 - 我覆盖了 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

希望有帮助,
克里斯.

I just needed to do this - I overrode JsonEndpointFactory and tinkered with the binding in there, then added an endpoint using the new class.

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>

Then access your service with the endpoint and the callback query param e.g.
http://blah/service.svc/JSONP/GetStuff?callback=callbackname

Hope that helps,
Chris.

明月松间行 2025-01-02 12:29:59

注释中的格式不太好,因此为了将来的参考,这里列出了所需的用法和程序集。

非常感谢,这正是我所需要的!为了将来的参考,这些是 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 服务 V1.0 SP2 RC

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

WCF RIA 服务工具包(2011 年 9 月)

Microsoft.ServiceModel.DomainServices.Hosting

Formatting in comments isn't great, so for future reference here are the required usings and assemblies.

Thanks very much, that's exactly what I needed!for future reference, these are the using statements:

Namespaces:

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;

Assemblies

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文