Следующий код всегда завершается с ошибкой 400 запросов

#c# #jquery #ajax #wcf

#c# #jquery #ajax #wcf

Вопрос:

     function SendEditCommand()
    {
        jQuery.ajax({
            url: 'http://localhost:15478/Service.svc/GetTest',
            type: 'GET',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function () {
                alert('success');
            },
            error: function(request, status, error) {
                alert(error);
            }
        });
    }

    jQuery(document).ready(function () {
        SendEditCommand();
    });
  
 <configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <connectionStrings>
        <add name="Entities" connectionString="metadata=res://*/Data.TechieCMS.csdl|res://*/Data.TechieCMS.ssdl|res://*/Data.TechieCMS.msl;provider=System.Data.SqlClient;provider connection string=amp;quot;Data Source=localhostmssql2008;Initial Catalog=TechieCMS;Integrated Security=True;MultipleActiveResultSets=Trueamp;quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
    <system.serviceModel>
        <services>
            <service name="DefaultService" behaviorConfiguration="DefaultServiceBehavior">
                <endpoint address="" binding="webHttpBinding" contract="Techie.CMS.Business.ContentProvider" behaviorConfiguration="DefaultEndpointBehavior" />
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            </service>
        </services>
        <behaviors>
            <endpointBehaviors>
                <behavior name="DefaultEndpointBehavior">
                    <enableWebScript />
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="DefaultServiceBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    </system.serviceModel>
</configuration>
  
     [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class ContentProvider
    {
        [OperationContract]
        [WebGet()]
        public string GetTest()
        {
            return "Test";
        }
    }
  

Комментарии:

1. Вы уверены, что служба запущена в указанном местоположении?

2. Как выглядит ваш global.asax?

Ответ №1:

Я предполагаю, что ему не нравится порт в URL. Все остальное верно. Используете ли вы IE? Работает ли это с другими браузерами? Другие люди с такой же проблемой использовали IE, и это работает в Firefox.

Возможно, попробуйте добавить переменную data и изменить ее на POST? Некоторые говорят, что это решает проблему.

Ответ №2:

Спасибо всем вам за ваши ответы, они, несомненно, были актуальны и стали частью головоломки. Ключевой проблемой было <имя службы=»DefaultService»… Я думал, что это просто должно было быть имя, которое я выбираю. Выяснилось, что это должно быть полное имя класса, который реализует контракт.