简体   繁体   中英

Wcf request is always coming with null parameters

I am trying to call through a REST request in SOAPUI a WCF service running in localhost from Visual Studio. My problem is that the request is coming with its properties to null. Here is the JSON of the request:

    { 
   "request":{ 
      "order":{ 
         "uuid":"FEAEBDE7-8328-4E39-99F3-CD83F7405573",
         "created":"2019-06-06T00:47:05+0200",
         "created_from_client_timezone":"2019-06-05T23:47:05+0100",
         "amount":1,
         "currency":"978",
         "paid":true,
         "status":"SUCCESS",
         "safe":true,
         "refunded":0,
         "additional":"Additional",
         "service":"REDSYS",
         "antifraud":"",
         "customer":"IDInterno",
         "transactions":[ 
            { 
               "uuid":"168A6B19-2F9A-4367-A1E6-3E382CBCA3B3",
               "created":"2019-06-06T00:54:52+0200",
               "created_from_client_timezone":"2019-06-05T23:54:52+0100",
               "operative":"AUTHORIZATION",
               "amount":1,
               "authorization":"188426",
               "status":"SUCCESS",
               "error":"NONE",
               "source":{ 
                  "object":"CARD",
                  "uuid":"15DAE75D-121C-4396-AEB4-988B8455E103",
                  "type":"CREDIT",
                  "token":"ebc9b5ffa2efcf74197734a071192817e6f2a3fc15f49c4b1bdb6edc46b16e3ab4109498bff8e6ba00fb6d2bd1838afbea67095c4caaa2f46e4acf4d5851884c",
                  "brand":"VISA",
                  "country":"ES",
                  "holder":"teste",
                  "bin":454881,
                  "last4":"0004",
                  "expire_month":"12",
                  "expire_year":"20",
                  "additional":"",
                  "bank":"SERVIRED, SOCIEDAD ESPANOLA DE MEDIOS DE PAGO, S.A."
               }
            }
         ],
         "token":"971857af7a43f021059fb2c7f62cb90e601fafe9a133062d0bca224bf6fc33899b68092288772331f33c310e422c51b0ca9bfb7bf7a6cad3af30473c992a7776",
         "ip":"82.154.162.202"
      },
      "client":{ 
         "uuid":"756CC6A3-933F-424B-B53B-39EC52118E7D"
      }
   }
}

This is my data contract in C #, drawn up by mapping JSON2CHARP:

[Serializable, JsonObject, DataContract]
        public partial class Request
        {
            [DataMember]
            [JsonProperty("order", Required = Required.Always)]
            public Order Order { get; set; }

            [DataMember]
            [JsonProperty("client", Required = Required.Always)]
            public Client Client { get; set; }
        }

        [Serializable, JsonObject, DataContract]
        public partial class Client
        {
            [DataMember]
            [JsonProperty("uuid", Required = Required.Always)]
            public string Uuid { get; set; }
        }

        [Serializable, JsonObject, DataContract]
        public partial class Order
        {
            [DataMember]            
            [JsonProperty("uuid", Required = Required.Always)]
            public string Uuid { get; set; }

            [DataMember]            
            [JsonProperty("created", Required = Required.Always)]
            public string Created { get; set; }

            [DataMember]            
            [JsonProperty("created_from_client_timezone", Required = Required.Always)]
            public string CreatedFromClientTimezone { get; set; }

            [DataMember]            
            [JsonProperty("amount", Required = Required.Always)]
            public long Amount { get; set; }

            [DataMember]            
            [JsonProperty("currency", Required = Required.Always)]
            [JsonConverter(typeof(ParseStringConverter))]
            public long Currency { get; set; }

            [DataMember]            
            [JsonProperty("paid", Required = Required.Always)]
            public bool Paid { get; set; }

            [DataMember]            
            [JsonProperty("status", Required = Required.Always)]
            public string Status { get; set; }

            [DataMember]            
            [JsonProperty("safe", Required = Required.Always)]
            public bool Safe { get; set; }

            [DataMember]            
            [JsonProperty("refunded", Required = Required.Always)]
            public long Refunded { get; set; }

            [DataMember]            
            [JsonProperty("additional", Required = Required.Always)]
            public string Additional { get; set; }

            [DataMember]            
            [JsonProperty("service", Required = Required.Always)]
            public string Service { get; set; }

            [DataMember]            
            [JsonProperty("antifraud", Required = Required.Always)]
            public string Antifraud { get; set; }

            [DataMember]            
            [JsonProperty("customer", Required = Required.Always)]
            public string Customer { get; set; }

            [DataMember]
            [JsonProperty("transactions", Required = Required.Always)]
            public List<Transaction> Transactions { get; set; }

            [DataMember]            
            [JsonProperty("token", Required = Required.Always)]
            public string Token { get; set; }

            [DataMember]            
            [JsonProperty("ip", Required = Required.Always)]
            public string Ip { get; set; }
        }

        [Serializable, JsonArray, DataContract]
        public partial class Transaction
        {
            [DataMember]            
            [JsonProperty("uuid", Required = Required.Always)]
            public string Uuid { get; set; }

            [DataMember]            
            [JsonProperty("created", Required = Required.Always)]
            public string Created { get; set; }

            [DataMember]            
            [JsonProperty("created_from_client_timezone", Required = Required.Always)]
            public string CreatedFromClientTimezone { get; set; }

            [DataMember]            
            [JsonProperty("operative", Required = Required.Always)]
            public string Operative { get; set; }

            [DataMember]            
            [JsonProperty("amount", Required = Required.Always)]
            public long Amount { get; set; }

            [DataMember]            
            [JsonProperty("authorization", Required = Required.Always)]
            [JsonConverter(typeof(ParseStringConverter))]
            public long Authorization { get; set; }

            [DataMember]            
            [JsonProperty("status", Required = Required.Always)]
            public string Status { get; set; }

            [DataMember]            
            [JsonProperty("error", Required = Required.Always)]
            public string Error { get; set; }

            [DataMember]            
            [JsonProperty("source", Required = Required.Always)]
            public Source Source { get; set; }
        }

        [Serializable, JsonObject, DataContract]
        public partial class Source
        {
            [DataMember]

            [JsonProperty("object", Required = Required.Always)]
            public string Object { get; set; }

            [DataMember]

            [JsonProperty("uuid", Required = Required.Always)]
            public string Uuid { get; set; }

            [DataMember]

            [JsonProperty("type", Required = Required.Always)]
            public string Type { get; set; }

            [DataMember]

            [JsonProperty("token", Required = Required.Always)]
            public string Token { get; set; }

            [DataMember]

            [JsonProperty("brand", Required = Required.Always)]
            public string Brand { get; set; }

            [DataMember]

            [JsonProperty("country", Required = Required.Always)]
            public string Country { get; set; }

            [DataMember]

            [JsonProperty("holder", Required = Required.Always)]
            public string Holder { get; set; }

            [DataMember]

            [JsonProperty("bin", Required = Required.Always)]
            public long Bin { get; set; }

            [DataMember]

            [JsonProperty("last4", Required = Required.Always)]
            public string Last4 { get; set; }

            [DataMember]

            [JsonProperty("expire_month", Required = Required.Always)]
            [JsonConverter(typeof(ParseStringConverter))]
            public long ExpireMonth { get; set; }

            [DataMember]

            [JsonProperty("expire_year", Required = Required.Always)]
            [JsonConverter(typeof(ParseStringConverter))]
            public long ExpireYear { get; set; }

            [DataMember]

            [JsonProperty("additional", Required = Required.Always)]
            public string Additional { get; set; }

            [DataMember]

            [JsonProperty("bank", Required = Required.Always)]
            public string Bank { get; set; }
        }

This is my interface:

[ServiceContract(Namespace = "Satellise.Integration.CardRegistrationWS", Name = "PGQCRMRegistrarTarjeta")]
    public interface ICreditCardRegistration
    {

        [OperationContract(Name = "RegistrarTarjeta")]
        [WebInvoke(UriTemplate = "RegistrarTarjeta/", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
        ResponsePagaqui RegistrarTarjeta(Request request);
    }

And this is my web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  <!-- SERVIDOR <add key="directoryLogPagaqui" value="C:\IntegrationLogEstacion\REST\" /> -->
    <!-- PRUEBAS MI MÁQUINA-->  <add key="directoryLogPagaqui" value="C:\Users\A753752\OneDrive - Atos\Documents\S A T E L I S E\prueba" />
    <add key="saveAlwaysLog" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="Satellise.Integration.CardRegistrationWS.PagaquiService" behaviorConfiguration="ServiceBehavior">
        <endpoint binding="webHttpBinding" contract="Satellise.Integration.CardRegistrationWS.ICreditCardRegistration"
                  behaviorConfiguration="webHttp"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior" >
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
        <behavior>
          <!-- Para evitar revelar información de los metadatos, establezca los valores siguientes en false antes de la implementación -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- Para recibir detalles de las excepciones en los fallos, con el fin de poder realizar la depuración, establezca el valor siguiente en true. Para no revelar información sobre las excepciones, establézcalo en false antes de la implementación -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        Para examinar el directorio raíz de la aplicación web durante la depuración, establezca el valor siguiente en true.
        Establézcalo en false antes de la implementación para evitar revelar información sobre la carpeta de aplicación web.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
      <proxy autoDetect="True" bypassonlocal="False" />
    </defaultProxy>
  </system.net>

</configuration>

What am I doing wrong? I am not able to find why the request message is coming with both Order and Client null.

Finnally I found the reason why it did not work. I had to specify the namespace for the data contract.

   [DataContract (Namespace="my_namespace"]
        public partial class Source{}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM