Извините, что беспокоился о проблеме с кодировкой, но подумал, чтобы спросить, есть ли у кого-нибудь подсказка.Проблемы с WCF и проблемы с вызовом AJAX
Мы пишем службу обертки WCF для обработки HTTP-запросов AJAX. Я предоставляю фрагменты кода из определения службы, службы web.config и клиентского вызова AJAX.
Проблема заключается в том, что мы можем пройти через точки останова, когда вызов попадает на службу, но входной параметр «operationData» по какой-то причине приближается к нулю?
Мы не можем определить, есть ли проблема в настройках web.config, определении службы или синтаксисе вызова AJAX.
Service definition:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
[ServiceContract(Namespace = "localhost")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ST1Services
{
[OperationContract]
// As soon as we include this attribute, the service never gets hit???
//[WebInvoke(
// UriTemplate = "/stapiRegisterPlayer/{operationData}",
// RequestFormat = WebMessageFormat.Json,
// ResponseFormat = WebMessageFormat.Json,
// Method = "POST")
//]
public string stapiRegisterPlayer(string operationData)
{
var serviceResponse = "{\"servicesresponse\":\"Successfull!\"}";
return serviceResponse;
}
}
Сервис web.config:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ST1ServicesAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="ST1Services">
<endpoint address="" behaviorConfiguration="ST1ServicesAspNetAjaxBehavior" binding="webHttpBinding" contract="ST1Services" />
</service>
</services>
</system.serviceModel>
JSON вход в службу:
var jsonRequestParameters = "{";
jsonRequestParameters += " 'operatorId': '188',";
jsonRequestParameters += " 'siteId': '229',";
jsonRequestParameters += " 'siteUsername': '1886232015229',";
jsonRequestParameters += " 'sitePwd': '1H#k9rr4ocReKfSt',";
jsonRequestParameters += " 'geoComplyEncryptedPacket': 'ZsUiDymAiyVr/aQxwqC60c50qCfhJ9WPvZo3TrNAmXxD20onJILaqkmK+CGEDzr7tveVE=',";
jsonRequestParameters += " 'userName': 'tuser-20154825104',";
jsonRequestParameters += " 'ipAddress': '184.182.215.167',";
jsonRequestParameters += " 'playerDetails': ";
jsonRequestParameters += " {";
jsonRequestParameters += " 'userName': 'tuser-20154825104',";
jsonRequestParameters += " 'firstName': 'Test',";
jsonRequestParameters += " 'middleInitial': 'J',";
jsonRequestParameters += " 'lastName': 'User',";
jsonRequestParameters += " 'gender': 'Male',";
jsonRequestParameters += " 'dob': '07/1/1972',";
jsonRequestParameters += " 'emailAddress': '[email protected]',";
jsonRequestParameters += " 'playerAddress1': '7275 E Gold Dust',";
jsonRequestParameters += " 'playerAddress2': '#224',";
jsonRequestParameters += " 'city': 'Paradise Valley',";
jsonRequestParameters += " 'county': 'Maricopa',";
jsonRequestParameters += " 'state': 'Arizona',";
jsonRequestParameters += " 'zipCode': '85258',";
jsonRequestParameters += " 'country': 'United States',";
jsonRequestParameters += " 'mobileNo': '+1-602-555-1212',";
jsonRequestParameters += " 'landLineNo': '+1-602-555-1212',";
jsonRequestParameters += " 'ssn': '111-22-3333',";
jsonRequestParameters += " 'dlNumber': 'D08019649',";
jsonRequestParameters += " 'dlIssuingState': 'Arizona',";
jsonRequestParameters += " 'ipAddress': '184.182.215.167'";
jsonRequestParameters += " }";
jsonRequestParameters += "}";
AJAX вызов службы WCF:
var serviceURL = "http://localhost/STI/webservices/ST1Services.svc/stapiRegisterPlayer";
try
{
$.ajax({
type: "POST", // GET or POST or PUT or DELETE verb
url: serviceURL, // Location of the service
data: jsonRequestParameters, // Data sent to server
contentType: "application/json;", //"application/json; charset=utf-8;", // content type sent to server
dataType: "json", // Expected data format from server
processdata: false, // True or False
success: function (msg) { //On Successfull service call
ServiceSucceeded(msg);
},
error: ServiceFailed // When Service call fails
});
}
catch(err)
{
alert(err.message);
}
я боролся с этим в течение 2-х дней. Если кто-нибудь может помочь мне решить эту проблему, вселенная погасит непредвиденным образом.
Благодарим за внимание!
Теплые отношения,
Джо
Не могли бы вы попробовать использовать что-то вроде стельку или почтальона рассмотреть просьбу которые отправляются в службу и подтверждают, что JSON находится в запросе, я бы также использовал правильную нотацию JSON для создания вашего объекта, а затем использовал JSON.stringify() для преобразования в строку –