Служба REST, доступная для WCF, не заполняющая значения параметров - PullRequest
1 голос
/ 22 января 2009

У меня есть служба WCF, которая принимает в качестве параметра строковое значение «имя». Этот интерфейс службы выглядит следующим образом ...

[ServiceContract(Name = "ContactLookup", Namespace = "Search")]
public interface IAjaxResultSearcherService
{
    [OperationContract]
    [WebGet(RequestFormat = WebMessageFormat.Json)]
    Result[] SearchResultsWithNameLike(string name);
}

Служба может использовать следующую конфигурацию ...

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <behaviors>
        <serviceBehaviors>
            <behavior name="AjaxServiceBehavior">
                <serviceDebug
                       includeExceptionDetailInFaults="true" 
                       httpHelpPageEnabled="true"/>
                <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
                <serviceCredentials>
                    <serviceCertificate findValue="localhost" 
                                 storeLocation="LocalMachine" 
                                 storeName="My" x509FindType="FindBySubjectName"/>
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="JsonBehavior">
                <enableWebScript/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <services>
        <service name="HelloIndigo.AjaxResultSearcherService" 
                             behaviorConfiguration="AjaxServiceBehavior">
            <endpoint address="json"
                      binding="webHttpBinding"
                  behaviorConfiguration="JsonBehavior"
                      contract="Contract.IAjaxResultSearcherService" />
        </service>
    </services>
</system.serviceModel>

Мой файл .svc использует WebScriptServiceHostFactory. Кажется, это работает, это означает, что я могу подключиться к службе из моего клиента jquery, но даже если я установил значение параметра с помощью вызова ajax, когда сообщение попадает в реализацию службы, значение параметра равно нулю.

Я звоню в сервис через jquery, вот так ...

$.ajax({
    url: url,
    data: { "name":"test" },
    type: "GET",
    processData: false,
    contentType: "application/json",
    timeout: 10000,
    dataType: "text",
    success: function(res) {
        alert('function successful! returned: ' + res.toString());
    },
    error: function(xhr) {
        alert('an error occurred: ' + xhr.responseText);
    }
});

Я не получаю ошибок от вызова службы, но когда я отлаживаю процесс, значение параметра равно нулю. Почему WCF не передает значения параметров, как я ожидал?

Спасибо за помощь.

1 Ответ

1 голос
/ 23 января 2009

В своих испытаниях я пытался использовать JSON2 JSON.org для «строкового преобразования» моего объекта json и передачи его в вызов ajax в качестве объекта данных, и для параметра processData было установлено значение false. Как только я решил оставить элементы данных как нативные объекты JSON и установить для processData значение true, мои значения параметров были заполнены.

Я все еще не уверен, почему stringify JSON2.js не сделал параметр данных действительным, но по крайней мере это работает.

Итак, ранее у меня было следующее:

var json = JSON.stringify({ "name":"test" });
$.ajax({
    url: url,
    data: json,
    type: "GET",
    processData: false,
    contentType: "application/json",
    timeout: 10000,
    dataType: "text",
    success: function(res) {
        alert('function successful! returned: ' + res.toString());
    },
    error: function(xhr) {
        alert('an error occurred: ' + xhr.responseText);
    }
});

Рабочая версия, однако выглядит так ...

var json = { "name":"test" };
$.ajax({
    url: url,
    data: json,
    type: "GET",
    processData: true,
    contentType: "application/json",
    timeout: 10000,
    dataType: "text",
    success: function(res) {
        alert('function successful! returned: ' + res.toString());
    },
    error: function(xhr) {
        alert('an error occurred: ' + xhr.responseText);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...