为什么我不能在c#中调用Web服务?

问题描述:

我在C#中的新想太多拨打银行的Web服务,银行文件中这样写:
调用BatchBillPaymentRequestClientBatchBillPaymentRequestData对象输入argumant:
为什么我不能在c#中调用Web服务?

BatchBillPaymentRequest(ClientBatchBillPaymentRequestData data) 

为此写这个类:

class ClientBatchBillPaymentRequestData 
    { 
     public string CallbackUrl { get; set; } 
     public string LoginAccount { get; set; } 
     public int OrderId { get; set; } 
     public string BillId { get; set; } 
     public string PayId { get; set; } 
     public string AdditionalData { get; set; } 
    } 


和编写代码:

payment.BillService behzad=new BillService(); 
      ClientBatchBillPaymentRequestData datas = new ClientBatchBillPaymentRequestData(); 
      datas.BillId = "1233"; 
      datas.CallbackUrl = "google.com"; 
      datas.LoginAccount = "213214"; 
      datas.OrderId = 123; 
      datas.PayId = "2131243"; 
      datas.AdditionalData = "23213"; 
      behzad.BatchBillPaymentRequest(datas); 


但在这一行:

behzad.BatchBillPaymentRequest(datas); 


得到这个错误:
严重性代码说明项目文件的线路抑制状态

Error CS1503 Argument 1: cannot convert from 'ConsoleApplication1.ClientBatchBillPaymentRequestData' to 'ConsoleApplication1.payment.ClientBatchBillPaymentRequestData' ConsoleApplication1 L:\TEMP\ConsoleApplication1\ConsoleApplication1\Program.cs 23 Active 


发生什么事怎么可以?我解决这个问题?谢谢。 VS添加该类太项目:

public ClientBatchBillPaymentResponseData BatchBillPaymentRequest(ClientBatchBillPaymentRequestData requestData) { 
      object[] results = this.Invoke("BatchBillPaymentRequest", new object[] { 
         requestData}); 
      return ((ClientBatchBillPaymentResponseData)(results[0])); 
     } 
+4

因为VS已经添加了一个类'ClientBatchBillPaymentRequestData'与所有需要的属性,当您添加的引用到Web服务器。你不需要写你自己的。只需使用'ConsoleApplication1.payment.ClientBatchBillPaymentRequestData'(就像你已经用'BillService'完成的那样) –

+0

@AdrianoRepetti你的意思是什么你不需要编写自己的一个? –

+0

当您添加对该Web服务的引用时,Visual Studio已经为您生成了该类(因为它生成了“BillService”类)。只需删除你的类并使用'var datas = new payment.ClientBatchBillPaymentRequestData();' –

Adriano Repetti的评论 - 当你添加的Web服务引用的Visual Studio中创建一个类供您使用 - 因此,这段代码从这个

payment.BillService behzad=new BillService(); 
ClientBatchBillPaymentRequestData datas = new ClientBatchBillPaymentRequestData(); 
datas.BillId = "1233"; 
datas.CallbackUrl = "google.com"; 
datas.LoginAccount = "213214"; 
datas.OrderId = 123; 
datas.PayId = "2131243"; 
datas.AdditionalData = "23213"; 
behzad.BatchBillPaymentRequest(datas); 
改变

这个

payment.BillService behzad=new BillService(); 
var datas = new ConsoleApplication1.payment.ClientBatchBillPaymentRequestData(); 
datas.BillId = "1233"; 
datas.CallbackUrl = "google.com"; 
datas.LoginAccount = "213214"; 
datas.OrderId = 123; 
datas.PayId = "2131243"; 
datas.AdditionalData = "23213"; 
behzad.BatchBillPaymentRequest(datas); 

你可以这样做,而不是太

简化这一点
payment.BillService behzad=new BillService(); 
var datas = new ConsoleApplication1.payment.ClientBatchBillPaymentRequestData{ 
    BillId = "1233", 
    CallbackUrl = "google.com", 
    LoginAccount = "213214", 
    OrderId = 123, 
    PayId = "2131243", 
    AdditionalData = "23213" 
} 
behzad.BatchBillPaymentRequest(datas); 

您还应该删除您创建的ClientBatchBillPaymentRequestData类作为其剩余要求。

对于对象实例化中的每个属性,突出显示它并按CTRL-Space以获得自动完成以正确处理参数名称。

如果你不知道Web服务调用的结构,你可以使用Wizdler for Chrome https://chrome.google.com/webstore/detail/wizdler/oebpmncolmhiapingjaagmapififiakb?hl=en来找出数据包应该是什么。

安装完成后,在chrome中输入WSDL网址,点击地址栏右侧的wizdler按钮,选择要调用的方法,这会让您看到参数(包括它们的名称和外壳) 。

https://forgetfulprogrammer.files.wordpress.com/2014/06/wizdler.png

+0

感谢我的朋友,但是当我的项目编写代码得到这个错误:严重\t代码\t说明\t项目\t文件\t线\t抑制状态 错误\t CS1061 \t“ClientBatchBillPaymentRequestData”不包含'的定义PayId“,并且没有找到接受”ClientBatchBillPaymentRequestData“类型第一个参数的扩展方法”PayId“(您是否缺少使用指令或程序集引用?)\t ConsoleApplication1 \t L:\ TEMP \ ConsoleApplication2 \ ConsoleApplication1 \ Program.cs 有效 –

+0

它是否编译?您的Web服务是否提供了与您的代码相同的属性值? PayID是一个返回值,而不是您在后期设置的内容?您总是可以尝试使用Wisdler来确定您的web服务请求以及对象上是否有合适的外壳。 – Mauro

+0

请等待我的朋友 –