POST метод в WCF Rest Serivce не работает, когда в него передаются данные? - PullRequest
2 голосов
/ 04 февраля 2012

У меня есть wcf rest Service, когда я использовал метод GET, он прекрасно работает, когда я передаю данные вместе с URL, но мне нужно использовать метод post, и когда нет данных для передачи в методе post, он работает нормально ..Но когда некоторые данные добавляются, он возвращает ошибку Bad Request в IE, а в Mozila и chrome он просто возвращает Error. У меня есть сообщение о коде, который я использовал в сервисе wcf, и метод ajax ниже.pls help

Код в Ischeduler.cs

[ServiceContract]
public interface Ischeduler
{

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "GetData", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    string GetData();

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "GetDataName", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    string GetDataName(string Name);
}

scheduler.cs

public string GetData()
    {
        string getdata = "hgello";
        return string.Format("You entered" + getdata);
    }
public string GetDataName(string Name)
    {
        return string.Format("You entered" + Name);
    }

Ajax-запрос в Schedular.aspx при нажатии кнопки

$("#btnInvoke").click(function () {
                  $.ajax({
                      type: "GET",
                      url: "http://localhost:3125/schedulerAPI_Service/scheduler.svc/GetDataName",
                      data: '{"Name": "John"}',
                      dataType: 'json',
                      processdata: true,
                      contentType: "application/json; charset=utf-8",
                      crossdomain: true,
                      success: function (data) {
                         alert(data);
                      },
                      error: function (xhr, status, error) {
                          alert("failed " + error);
                      }
                  });

Wcf Web Config

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
        <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
    <connectionStrings>
        <add name="InstaScribeCentralConnectionString" connectionString="Data Source=ATLT53;Initial Catalog=InstaScribeCentral;User ID=sa;Password=bmjobmjo;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="ServiceBehavior">
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="ServiceBehavior" name="scheduler">
                <endpoint address="" behaviorConfiguration="ServiceBehavior" binding="webHttpBinding" contract="Ischeduler"/>
            </service>
        </services>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    </system.serviceModel>
</configuration>

Ответы [ 3 ]

0 голосов
/ 04 февраля 2012

Вы пытались применить enableWebScript в вашей конфигурации WCF, например, так:

<endpointBehaviors>
    <behavior name="ServiceBehavior">
        <enableWebScript/>
    </behavior>
</endpointBehaviors>

Помимо всего этого и упомянутых @ShankarSangoli, все выглядит хорошо.

0 голосов
/ 26 марта 2012

Вы должны установить для aspNetCompatibilityEnabled значение false в web.config

<serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>

Если для aspNetCompatibilityEnabled установлено значение true, необходимо разрешить режим AspNetCompatibilityRequirements в ServiceContract.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Вы также должны установитьвведите "POST".

0 голосов
/ 04 февраля 2012

Передайте данные следующим образом.

data: { Name: "John" }

Измените тип на post и удалите processdata: true, в любом случае есть опечатка, d в данных процесса должно быть заглавной processData.Значение по умолчанию - true, поэтому указывать не нужно.

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