WCF 问题:请求和响应类
本文关键字:响应 求和 请求 问题 WCF | 更新日期: 2023-09-27 18:37:10
有人可以向我解释一下请求和响应模型在WCF中的工作原理吗?我有一个简单的服务,它公开了一个名为getRateOfExchange的方法,其中包含一个返回rateOfExchange[]的整数参数,但是从该服务生成的Reference.cs文件包含许多类:
getRateOfExchange(似乎是参数)
getRateOfExchangeRequest
getRateOfExchangeResponse
我已经尝试了这些类及其方法的所有排列,但没有任何效果。直观地说,您希望使用参数对象作为参数创建一个请求对象,然后将此请求传递给执行请求的响应上的方法。
但是没有。
它一定是痛苦的。
有人可以解释一下吗?
更新
谢谢Gigi,但我的课看起来不是那样的。
如果我按照您的模型,我的请求将如下所示:
CharterServices.charterServiceClient proxy = new CharterServices.charterServiceClient();
using (OperationContextScope scope = new OperationContextScope(proxy.InnerChannel));
{
using (proxy as IDisposable)
{
var response = proxy.getRateOfExchange()
}
}
但是,我的getRateOfExchange()方法需要一个getRateOfExchange对象,所以上面的代码无法编译。类包含的参数是 proxy.getRateOfExchange() 方法的参数。我尝试创建此类的实例并向其传递上述方法,如下所示:
using (proxy as IDisposable)
{
var rateOfExchange = new Service.getRateOfExchange()
{
charterEnquiryId = 1550003668
};
using (OperationContextScope scope = new OperationContextScope(proxy.InnerChannel));
{
using (proxy as IDisposable)
{
var response = proxy.getRateOfExchange(rateOfExchange);
foreach (var rateOfExcchange in response)
{
Debug.WriteLine(rateOfExcchange.fromCurrencyName);
}
}
}
}
但它在尝试调用 getRateOfExchange() 时挂起。
啊!我知道该服务正在工作,因为我可以在 SoapUI 中对同一个 WSDL 执行请求。
你能帮忙吗?
也不痛苦。生成代理/客户端类后,只需创建客户端的实例,然后调用这些方法,就好像它们是本地方法调用一样。
我无法在这里解释整个过程,但我会向您推荐我一年多前写的介绍,它用一个简单的例子解释了整个过程。
甚至可以在编写自己的客户端之前使用 WCF 测试客户端测试服务。如果使用服务引用,则编写客户端非常容易。
以下是该博客文章中代码的摘录,说明了如何使用客户端代码,为简洁起见,修改为具有using
块并使用 var
关键字:
static void Main(string[] args)
{
using (var service = new ServiceReference1.Service1Client())
{
var response = service.GetData(5);
Console.WriteLine(response);
Console.ReadLine();
}
}
系统抛出了一个未被捕获的异常,因此组件模型决定挂起!现在修复它。
假设rateOfExchange
是integers
的List
,我刚刚在其中添加了10个数字,从1到10。
然后,此列表作为参数发送到服务客户端对象的getRateOfExchange
方法。
List<int> rateOfExchange=new List<int>();
for(int i=0;i<10;i++)
{
rateOfExchange.Add(i);
}
//Service Call
ServiceClient obj=new ServiceClient();
var response=obj.getRateOfExchange(rateOfExchange);
foreach(var item in response)
{
Console.WriteLine(item);
}
Console.ReadLine();
希望对您有所帮助。