jQuery Ajax-вызов службы WCF, возвращающий «Метод не разрешен (405)» - PullRequest
1 голос
/ 17 июня 2010

Я создал службу WCF SOAP с использованием VS 2008, которая работает на стороне сервера.Я добавил следующий код для вызова той же клиентской стороны службы / контракта с использованием jQuery / json (без ASP.NET scriptmanager).Когда я помещаю URL-адрес службы в браузер, я получаю правильную страницу службы, и когда я вызываю службу из javascript и трассировки через Firebug, я получаю «405 метод не разрешен».

Функция ошибки ajax ()statusText и и responseText не содержат ничего, и функция ошибки вызывается дважды по какой-то странной причине.Я также вызываю службу со страницы https.

Тот же код ajax работает с аналогичным традиционным веб-сервисом как на стороне сервера, так и на стороне клиента, а также с методом страницы.

Любые подсказки?Я также заметил, что моя активация Windows Communication Foundation HTTP и не-HTTP активация не установлены.Нужно ли это?Хотя служба WCF на моем сервере работает.

Интерфейс:

[ServiceContract]
public interface ICust
{
    [OperationContract]
    [WebInvoke(Method = "POST", 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json)]
    bool GetCust(string zzz);
}

Класс:

public class Cust: ICust
{
    public bool GetCust(string zzz)
    {
        // Do Stuff
        // Return true/false; 
    }
 }

web.config:

<behaviors>
    <serviceBehaviors>
        <behavior name="E.W.CustomerBehavior" >
            <serviceMetadata httpGetEnabled="true" />
        </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
        <behavior name="webCallable">
            <webHttp />
        </behavior>            
    </endpointBehaviors>
</behaviors>

<services>
    <service behaviorConfiguration="E.W.CustomerBehavior"
        name="E.W.Customer">
        <endpoint address="http://zzzz/Cust.svc" 
            binding="webHttpBinding" 
            contract="E.W.ICust" 
            behaviorConfiguration="webCallable">
            <identity>
                <dns value="localhost" />
            </identity>
        </endpoint>
        <endpoint address="mex" 
            binding="mexHttpBinding" 
            contract="IMetadataExchange" />
    </service>
</services>

jQuery:

$.ajax({
    cache: false,
    async: false,
    type: "POST",
    url: "http://zzzz/Cust.svc/GetCust",
    contentType: "application/json",
    dataType: "json",
    data: "{'zzz': '" + $("#ctl00_zz_zzz").val() + "'}",
    success: function(msg) {
        // do stuff
    },
    error: function(z) { alert(z.responseText); }
});

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

Попробуйте поставить следующий атрибут в классе Cust

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
0 голосов
/ 17 июня 2010

Проблема была в https. Страница, с которой была вызвана служба, была https, поэтому «метод не разрешен».

Я изменил файл web.config и javascript, чтобы вызвать службу через https, и она заработала.

Это помогло мне.

Теперь я понимаю, почему люди говорят, что WCF - это больше работы.

Я установил Windows Communication Foundation HTTP Activation и Non-HTTP Activation, что никак не связано с моей проблемой, но я до сих пор не понимаю, что это такое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...