为什么我不能在c#中调用Web服务?
我在C#中的新想太多拨打银行的Web服务,银行文件中这样写:
调用BatchBillPaymentRequest
法ClientBatchBillPaymentRequestData
对象输入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]));
}
按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按钮,选择要调用的方法,这会让您看到参数(包括它们的名称和外壳) 。
感谢我的朋友,但是当我的项目编写代码得到这个错误:严重\t代码\t说明\t项目\t文件\t线\t抑制状态 错误\t CS1061 \t“ClientBatchBillPaymentRequestData”不包含'的定义PayId“,并且没有找到接受”ClientBatchBillPaymentRequestData“类型第一个参数的扩展方法”PayId“(您是否缺少使用指令或程序集引用?)\t ConsoleApplication1 \t L:\ TEMP \ ConsoleApplication2 \ ConsoleApplication1 \ Program.cs 有效 –
它是否编译?您的Web服务是否提供了与您的代码相同的属性值? PayID是一个返回值,而不是您在后期设置的内容?您总是可以尝试使用Wisdler来确定您的web服务请求以及对象上是否有合适的外壳。 – Mauro
请等待我的朋友 –
因为VS已经添加了一个类'ClientBatchBillPaymentRequestData'与所有需要的属性,当您添加的引用到Web服务器。你不需要写你自己的。只需使用'ConsoleApplication1.payment.ClientBatchBillPaymentRequestData'(就像你已经用'BillService'完成的那样) –
@AdrianoRepetti你的意思是什么你不需要编写自己的一个? –
当您添加对该Web服务的引用时,Visual Studio已经为您生成了该类(因为它生成了“BillService”类)。只需删除你的类并使用'var datas = new payment.ClientBatchBillPaymentRequestData();' –