WCF + JSONP: всегда появляется сообщение об ошибке «метод не разрешен» - PullRequest
3 голосов
/ 14 октября 2011

Работая на чистой странице javasript / html для вызова веб-службы WCF, используя JSONP для обхода междоменной проблемы, получил сообщение об ошибке «метод не разрешен», выполнил поиск в Интернете, но не смог найти эффективное решение ..

архитектура: WCF 3.5 + JSONP + JQuery

Чтобы включить функцию JSONP в WCF 3.5, я добавил образцы файлов MSDN JSONP:

JSONPBehavior.cs
JSONPBindingElement.cs
JSONPBindingExtension.cs
JSONPEncoderFactory.cs

от http://msdn.microsoft.com/en-us/library/cc716898.aspx. после этого поста: http://jasonkelly.net/2009/05/using-jquery-jsonp-for-cross-domain-ajax-with-wcf-services/

IService1.cs:

namespace WcfServiceForConnDatabase
{
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "GetData")]
        [JSONPBehavior(callback = "method")] 
        string GetData();
    }
}

service.cs:

namespace WcfServiceForConnDatabase
{

    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
    public class Service1 : IService1
    {
         public string GetData()
        {
            return "Successfully connect with the WCF Web Service";
        }
    }
}

web.config:

<?xml version="1.0"?>
<configuration>
    <!-- WCF configuration -->
    <system.serviceModel>
        <behaviors>
            <endpointBehaviors>
                <behavior name="WcfServiceForConnDatabase.Service1Behavior">          
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <services>
            <service name="WcfServiceForConnDatabase.Service1">
                <endpoint address="" behaviorConfiguration="WcfServiceForConnDatabase.Service1Behavior" binding="customBinding" bindingConfiguration ="jsonpBinding" contract="WcfServiceForConnDatabase.IService1"/>
      </service>
      </services>
    <bindings>
      <customBinding>
        <binding name="jsonpBinding" >
          <jsonpMessageEncoding />
          <httpTransport manualAddressing="true"/>
        </binding>
      </customBinding>
    </bindings>
    <extensions>
      <bindingElementExtensions>
        <add name="jsonpMessageEncoding" type="WcfServiceForConnDatabase.JsonpBindingExtension, WcfServiceForConnDatabase, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      </bindingElementExtensions>
    </extensions>
    </system.serviceModel>
    <system.web>
        <compilation debug="true"/>
    </system.web>

передний конец:

$.ajax({
            url: "http://192.168.0.23/Service1.svc/GetData",
            type: "GET",
            jsonpCallback: "TestData",
            contentType: "application/json",
            dataType: "jsonp",
            error: function () {
                alert("Error");
            },
            success: function (data) {
                alert("Success");
            }
        });

    }

структура сети выглядит следующим образом: два ПК в локальной сети: один для клиентской страницы javascript, другой для веб-службы (192.168.0.23).

Надеюсь, кто-нибудь может дать мне несколько предложений !!! ценим вас всех!

1 Ответ

0 голосов
/ 19 июня 2013

То, что вы должны учитывать при использовании WCF в вызове jQuery AJAX (кросс-домен);

  1. Запустите проект службы WCF в отдельном экземпляре Visual Studio. Не смешивайте проект службы WCF и проект потребления в одном экземпляре и выполняйте одновременно. Когда вы запускаете потребляющий проект, проект WCF уже должен быть запущен.
  2. Использовать DataType в качестве jsonp вместо json.
  3. В файле web.config проекта WCF убедитесь, что в теге \\ есть атрибут crossDomainScriptAccessEnabled = "true" в теге \\. Также имя привязки установлено в атрибуте bindingConfiguration в теге.

Проверьте это для получения дополнительной информации:

Использование службы WCF в jQuery через AJAX Call в другом проекте (междоменный домен)

...