Как я могу добавить конечную точку JSONP для WCF Ria Services, чтобы разрешить междоменные вызовы? - PullRequest
1 голос
/ 11 января 2012

Мне известно, что службы WCF RIA имеют Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory, который я могу использовать для включения JSON.Мне нужно включить междоменные звонки через JSONP.Существует ли существующая DomainServiceEndpointFactory, которая будет выполнять это?

Ответы [ 2 ]

1 голос
/ 26 января 2012

Форматирование в комментариях не очень хорошо, поэтому для дальнейшего использования здесь требуются использование и сборки.

Большое спасибо, это именно то, что мне нужно! Для дальнейшего использования, это операторы использования:

Пространства имен:

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

Службы RIA WCF V1.0 SP2 RC

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

Инструментарий WCF RIA Services (сентябрь 2011 г.)

Microsoft.ServiceModel.DomainServices.Hosting
1 голос
/ 25 января 2012

Мне просто нужно было сделать это - я переопределил 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

Надеюсь, это поможет, Крис.

...