Wcf请求始终带有空参数

问题描述 投票:0回答:1

我正在尝试通过SOAPUI中的REST请求将Visual Studio中在localhost中运行的WCF服务调用。我的问题是该请求的属性为null。这是请求的JSON:

    { 
   "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"
      }
   }
}

这是我在C#中的数据协定,通过映射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; }
        }

这是我的界面:

[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);
    }

这是我的web.config文件:

<?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>

我在做什么错?我无法找到为什么请求消息同时带有Order和Client null的原因。

json rest wcf soapui datacontractserializer
1个回答
0
投票

最后我找到了它不起作用的原因。我必须为数据协定指定名称空间。

   [DataContract (Namespace="my_namespace"]
        public partial class Source{}
© www.soinside.com 2019 - 2024. All rights reserved.