【问题标题】:Using a WSDL File to Submit XML file through web service使用 WSDL 文件通过 Web 服务提交 XML 文件
【发布时间】:2014-12-02 19:46:12
【问题描述】:

我正在使用 ASP.NET 和 C# 显示一个表单,供某人通过单击按钮完成并向外部公司提交请求。该公司提供了一个 WSDL 文件,我可以将其作为 Web 参考导入到我的解决方案中。一旦我添加了引用,它就会生成一堆类,这些类似乎创建了一个 XML 文件,据我所知,这是我需要做的。我给出了一个 XML 文件提交的示例,但我对如何通过 Web 参考和提交请求感到有些困惑。

这里是WSDL

我正在尝试调用复杂类型(方法)ClaimSubmittalRequest 这是我在 C# 代码中能够做到的(获取和设置字段):

        var submitClaim = new ThermalKing.SubmitClaimRequest
        {
            claimLanguage = "ENG",
            serviceVersion = "1.0",
            claimType = "PARTS",
            failureDate = new DateTime(2014, 11, 26),
            faultFound = "PERFORM A FREE INSPECTION"
        };

        var submitParts = new ThermalKing.eachPart
        {
            partNumber = "1234",
            partPrice = 100.78,
            partQuantity = 17
        };

示例 XML 文件如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:get="http://data-test.thermoking.com/ThermoKingWebServices/SubmitClaim/getSubmitClaimWSD">
   <soapenv:Header/>
   <soapenv:Body>
      <get:getSubmitClaim>
         <SubmitClaimRequest>

            <buName>Thermo King TSA</buName>
            <dealerNumber>P5358</dealerNumber>
            <userName></userName>
            <password></password>

            <transactionType>WARRANTY</transactionType>
            <claimType>Machine</claimType>

            <inventorySerialNumber>6001061225</inventorySerialNumber>

            <repairDate>2011-09-05T00:00:00.000-05:00</repairDate>
            <failureDate>2011-09-05T00:00:00.000-05:00</failureDate>

            <workOrderNumber>testProcede1</workOrderNumber>
            <conditionsFound>test</conditionsFound>
            <workPerformed>test</workPerformed>
            <claimNotes>test claim notes</claimNotes>

            <!-- will be optional fields in the future -->
              <faultLocation>FF</faultLocation>
              <faultFound>BLOWN/BURST</faultFound>
              <failureDetail xsi:nil="true"/>

            <smrClaim>N</smrClaim>
            <forceToDraft>Y</forceToDraft>
            <validateOnly>N</validateOnly>
            <commercialPolicy>N</commercialPolicy>

            <!-- will be optional fields in the future -->
              <fuelSurcharge>0</fuelSurcharge>
              <shopSupplies>0</shopSupplies>

            <claimCurrency>USD</claimCurrency>
            <workOrderSegment>1</workOrderSegment>
            <claimLanguage>ENG</claimLanguage>
            <serviceVersion>1.0</serviceVersion>

            <partsType>
               <!--1 or more repetitions:-->
               <eachPart>
                  <partType>IRREMOVED</partType>
                  <partNumber>416780</partNumber>
                  <partQuantity>1.0</partQuantity>
                  <partPrice>1.23</partPrice>
                  <partDescription>test part desc</partDescription>
               </eachPart>
               <eachPart>
                  <partType>NONIR</partType>
                  <partNumber>1</partNumber>
                  <partQuantity>1.0</partQuantity>
                  <partPrice>1</partPrice>
                  <partDescription>test non IR</partDescription>
               </eachPart>
               <eachPart>
                  <partType>IRINSTALLED</partType>
                  <partNumber>416780</partNumber>
                  <partQuantity>1.0</partQuantity>
                  <partPrice>1</partPrice>
                  <partDescription>test ir installed</partDescription>
               </eachPart>
            </partsType>

            <jobCodesType>
               <!--1 or more repetitions:-->
               <eachJobCode>
                  <jobCode>05051</jobCode>
                  <standardLaborHours>1</standardLaborHours>
                  <additionalLaborHours>.5</additionalLaborHours>
                  <laborRate>92.22</laborRate>
                  <ReasonForAdditionalLaborHours>test</ReasonForAdditionalLaborHours>
               </eachJobCode>
            </jobCodesType>

            <usageMetersType>
               <!--1 or more repetitions:-->
               <eachUsageMeter>
                  <usageAmount>1661</usageAmount>
                  <usageType>HoursInService</usageType>
                  <usageUOM>HOURS</usageUOM>
               </eachUsageMeter>
            </usageMetersType>


         </SubmitClaimRequest>
      </get:getSubmitClaim>
   </soapenv:Body>
</soapenv:Envelope>

如何在我的 C# 代码中调用复杂类型方法将请求发送到外部公司?还是仅使用 C# 手动创建 XML 文件更容易?

更新代码:

    using (var client = new getSubmitClaimWSD_PortTypeClient())
    {
        SubmitClaimRequest request = new SubmitClaimRequest()
        {
            buName = "Thermo King TSA",
            dealerNumber = "PHSDF",
            userName = "Roger",
            password = "1234",
            transactionType = "WARRANTY",
            claimLanguage = "ENG",
            serviceVersion = "1.0",
            claimType = "PARTS",
            failureDate = new DateTime(2014, 11, 26),
            faultFound = "PERFORM A FREE INSPECTION",
            inventorySerialNumber = "12352341",
            repairDate = new DateTime(2014, 11, 26),
            workOrderNumber = "testProcede1",
            conditionsFound = "test",
            workPerformed = "test",
            claimNotes = "test claim notes",
            faultLocation = "FF",
            failureDetail = "test",
            smrClaim = "N",
            forceToDraft = "Y",
            validateOnly = "N",
            commercialPolicy = "N",
            fuelSurcharge = 0,
            shopSupplies = 0,
            claimCurrency = "USD",
            workOrderSegment = "1",
            partsType = new[]
            {
                new eachPart() {partNumber = "1234", partPrice = 100.78, partQuantity = 17, partType = "NONIR", partDescription = "test part desc"},
                new eachPart() {partNumber = "5678", partPrice = 200.90, partQuantity = 1, partType = "IRREMOVED", partDescription = "test part desc 2"}
            }
        };
        var response = client.getSubmitClaim(null, request);
        var rsp = response.response;
        Console.WriteLine("Status {0}, claim {1}; {2} {3}, {4} errors", rsp.status, rsp.claimNumber,
            rsp.workOrderNumber, rsp.workOrderSegment, rsp.errorsType.Length);
    }

【问题讨论】:

  • 请参阅How to consume a web service。您永远不会发送“XML 文件”。
  • @JohnSaunders 我读了那篇文章。所以基本上我不需要创建自己的 Web 服务,这就是我拥有 wsdl 的原因。我只需将 wsdl 添加为 Web 参考,然后应用我更新的代码?
  • 不,不要创建自己的服务。本文创建一个服务只是为了演示。只做使用服务的部分。你已经差不多了。
  • using 块中的任何东西都不是服务。一个是请求,另一个是请求的一部分。

标签: c# xml web-services wsdl


【解决方案1】:

试试这样的:

using (var client = new SubmitClaimService.getSubmitClaimWSD_PortTypeClient())
{
    SubmitClaimRequest request = new SubmitClaimRequest()
    {
        claimLanguage = "ENG",
        serviceVersion = "1.0",
        claimType = "PARTS",
        failureDate = new DateTime(2014, 11, 26),
        faultFound = "PERFORM A FREE INSPECTION",
        partsType =
            new[]
            {
                new eachPart() {partNumber = "1234", partPrice = 100.78, partQuantity = 17},
                new eachPart() {partNumber = "5678", partPrice = 200.90, partQuantity = 1}
            }
    };
    submitClaimResponse response = client.getSubmitClaim(request);
    var rsp = response.response;
    Console.WriteLine("Status {0}, claim {1}; {2} {3}, {4} errors", rsp.status, rsp.claimNumber,
        rsp.workOrderNumber, rsp.workOrderSegment, rsp.errorsType.Length);
}

我通过右键单击服务引用并选择“在对象浏览器中查看”来解决这个问题。或者,您可以使用 View->Object Browser 调出 Object Browser,然后导航到服务引用。

【讨论】:

  • 感谢您帮助我。你做了什么来添加服务?当我添加服务引用时,是否在 url 框中添加 wsdl url?
  • 是的。只需粘贴 URL:data-test.thermoking.com/ws/…
  • 好的,这也是我所做的,没有编译器错误或任何东西,但我得到一个异常状态:data.thermoking.com:10141/ws/… 上没有可以接受消息的端点监听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)
  • 所以端口以某种方式改变了。我修复了端口号并消除了上述错误,但现在在线: var response = client.getSubmitClaim("true",request) 我得到一个异常:底层连接已关闭:连接意外关闭。
  • 您使用的是哪个版本的 Visual Studio?我的没有“真”,只有request
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多