0

我正在使用 SOAP 服务。在 asp.net core 项目中作为连接服务。Soap UI 填充响应。但没有在 asp.net 核心中填充我的方法。

我搜索了许多不同的地方。我检查了一切。但我找不到问题的解决方案。

var products = response.GetProductListResponse.products

从上面的行返回一个数组。到目前为止没有问题。有些功能已经满了,但大部分都是空白的,我想不出一个合理的解决方案。

您可以在下面找到所有示例代码。预先感谢您的帮助。

模型绑定图像!.net 的响应 查看图片

连接服务.Json

  {
  "ProviderId": "Microsoft.VisualStudio.ConnectedService.Wcf",
  "Version": "15.0.40203.910",
  "ExtendedData": {
    "inputs": [
      "https://api.n11.com/ws/ProductService.wsdl"
    ],
    "collectionTypes": [
      "System.Collections.Generic.List`1",
      "System.Collections.Generic.Dictionary`2"
    ],
    "namespaceMappings": [
      "*, Soluto.Marketplace.WebServices.N11.Products"
    ],
    "targetFramework": "netcoreapp3.1",
    "typeReuseMode": "None"
  }
}

要求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://www.n11.com/ws/schemas">
   <soapenv:Header/>
   <soapenv:Body>
      <sch:GetProductListRequest>
         <auth>
            <appKey>apikey</appKey>
            <appSecret>secretKey</appSecret>
         </auth>
         <pagingData>
            <currentPage>0</currentPage>
            <pageSize>200</pageSize>
         </pagingData>
      </sch:GetProductListRequest>
   </soapenv:Body>
</soapenv:Envelope>

回复

<env:Body>
      <ns3:GetProductListResponse xmlns:ns3="http://www.n11.com/ws/schemas">
         <result>
            <status>success</status>
         </result>
         <products>
            <product>
               <currencyAmount>223.00</currencyAmount>
               <currencyType>2</currencyType>
               <displayPrice>1766.16</displayPrice>
               <isDomestic>false</isDomestic>
               <id>453198848</id>
               <price>1766.16</price>
               <productSellerCode>123156d4sf56sd4f56s</productSellerCode>
               <approvalStatus>1</approvalStatus>
               <saleStatus>2</saleStatus>
               <stockItems>
                  <stockItem>
                     <bundle>false</bundle>
                     <currencyAmount>223.00</currencyAmount>
                     <displayPrice>1766.16</displayPrice>
                     <optionPrice>1766.16</optionPrice>
                     <attributes/>
                     <id>126907849152</id>
                     <quantity>150</quantity>
                     <version>4</version>
                  </stockItem>
               </stockItems>
               <subtitle>test ürün 2</subtitle>
               <title>Test Ürün</title>
               <unitInfo/>
            </product>
         </products>
         <pagingData>
            <currentPage>0</currentPage>
            <pageSize>100</pageSize>
            <totalCount>1</totalCount>
            <pageCount>1</pageCount>
         </pagingData>
      </ns3:GetProductListResponse>
   </env:Body>
</env:Envelope>

C# 代码

 public async Task<IList<ProductBasic>> GetProducts(N11PagingModel n11PagingModel)
        {
            var authentication = GetAuthentication();
            var client = new ProductServicePortClient();
            
            var response = await client.GetProductListAsync(new GetProductListRequest { auth = authentication, pagingData = n11PagingModel.Map<RequestPagingData>() });

            var result = response.GetProductListResponse.result;
                          
            if (result.status == "success")
            {
                var products = response.GetProductListResponse.products?.ToList();
                return products;
            }
            else
            {
                return null;
            }
        }
4

2 回答 2

1

改变:

[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]

[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Document, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Literal)]
于 2020-11-24T19:06:53.500 回答
0

我在这里在黑暗中拍摄,但我认为问题是您试图通过调用以下两次来读取相同的响应流两次:

response.GetProductListResponse

而是尝试:

public async Task<IList<ProductBasic>> GetProducts(N11PagingModel n11PagingModel)
        {
            var authentication = GetAuthentication();
            var client = new ProductServicePortClient();
            
            var response = await client.GetProductListAsync(new GetProductListRequest { auth = authentication, pagingData = n11PagingModel.Map<RequestPagingData>() });

            var responseObject = response.GetProductListResponse;
                          
            if (responseObject.result.status == "success")
            {
                var products = responseObject.products?.ToList();
                return products;
            }
            else
            {
                return null;
            }
        }
于 2020-10-10T14:56:02.517 回答