2015-06-26 6 views
2

Извините, что беспокоился о проблеме с кодировкой, но подумал, чтобы спросить, есть ли у кого-нибудь подсказка.Проблемы с 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-х дней. Если кто-нибудь может помочь мне решить эту проблему, вселенная погасит непредвиденным образом.

Благодарим за внимание!

Теплые отношения,

Джо

+0

Не могли бы вы попробовать использовать что-то вроде стельку или почтальона рассмотреть просьбу которые отправляются в службу и подтверждают, что JSON находится в запросе, я бы также использовал правильную нотацию JSON для создания вашего объекта, а затем использовал JSON.stringify() для преобразования в строку –

ответ

0

В вашем АЯКС вызов, попробуйте явно переходя к методу с именем параметра:

data: {operationData: jsonRequestParameters},  // Data sent to server