Проблема с вызовом ajax POST для службы WCF - PullRequest
5 голосов
/ 11 апреля 2011

Я звоню в службу WCF из ajax и могу заставить ее работать как запрос GET, но не как запрос POST.Итак:

    [OperationContract]
    [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    public UserObject GetUser(string name)
    {
        // Add your operation implementation here
        var uo = new UserObject() { CustClass = "Guest", fname = "Chris", Email = "chris@Something", IsMobile = false };
        uo.fname = name;
        return uo;
    }

и

var json = { "name": "test" }; 
$.ajax({ //get user name and customer class
    type: "GET",
    url: "WritingAnalysisService.svc/GetUser",
    data: json,
    processData: true,
    contentType: "application/json",
    timeout: 10000, 
    dataType: "json", 
    cache: false,
    success: function (data) { //get user name and customer class
        customerclass = data.d.custclass;
        ffname = data.d.fname;
    }
});

работает, но:

    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    public UserObject GetUser(string name)
    {
        // Add your operation implementation here
        var uo = new UserObject() { CustClass = "Guest", fname = "Chris", Email = "chris@Something", IsMobile = false };
        uo.fname = name;
        return uo;
    }

и

$.ajax({ //get user name and customer class
    type: "POST",
    url: "WritingAnalysisService.svc/GetUser",
    data: json,
    processData: true,
    contentType: "application/json",
    timeout: 10000, 
    dataType: "json", 
    cache: false,
    success: function (data) { //get user name and customer class
        customerclass = data.d.custclass;
        ffname = data.d.fname;
    }
});

нет.Я что-то упустил?Я рву свои волосы здесь.Спасибо

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Используйте

BodyStyle = WebMessageBodyStyle.WrappedRequest 

для WebInvokeAttribute

1 голос
/ 11 апреля 2011

У меня был похожий пример проекта.Я выкладываю это здесь, надеюсь, это поможет :

Web.config:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="WebFormApp.MyWcfServiceAspNetAjaxBehavior">
                <enableWebScript/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service name="WebFormApp.MyWcfService">
            <endpoint address="" behaviorConfiguration="WebFormApp.MyWcfServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="WebFormApp.MyWcfService"/>
        </service>
    </services>
</system.serviceModel>

WCF:

<ServiceContract(Namespace:="")> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class MyWcfService

    <OperationContract(), _
    WebInvoke(Method:="POST", _
              BodyStyle:=WebMessageBodyStyle.WrappedRequest, _
              ResponseFormat:=WebMessageFormat.Json)> _
    Public Function GetTheEntity() As MyEntity
        Return New MyEntity With {.Name = "TheName", .Family = "TheFamily"}
    End Function

End Class

JS:

function doTestJQuery() {
                $.ajax({
                    type: "POST",
                    url: "MyWcfService.svc/GetTheEntity",
                    data: null,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    processdata: true,
                    success: srvSuccessJQuery,
                    error: null
                });
            }

            function srvSuccessJQuery(result) {
                alert(result.d.Family)
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...