C# WCF难题:请求和响应类
有人能给我解释一下请求和响应模型在WCF中是如何工作的吗?我有一个简单的服务,它公开了一个名为getRateOfExchange的方法,其中包含一个返回rateOfExchange[]的整数参数,但从该服务生成的Reference.cs文件包含许多类: getRateOfExchange(似乎是参数) getRateOfExchangeRequest getRateOfExchangeResponse 我尝试了这些类的每一种排列方式及其方法,但没有任何效果。直观地说,您希望创建一个以parameter对象作为参数的请求对象,然后将该请求传递给响应上的方法,该响应执行对服务器的请求 但是没有 一定很痛苦 有人能解释一下吗 更新 谢谢你,吉吉,但我的课看起来不像那样 如果我遵循您的模型,我的请求如下所示:C# WCF难题:请求和响应类,c#,wcf,C#,Wcf,有人能给我解释一下请求和响应模型在WCF中是如何工作的吗?我有一个简单的服务,它公开了一个名为getRateOfExchange的方法,其中包含一个返回rateOfExchange[]的整数参数,但从该服务生成的Reference.cs文件包含许多类: getRateOfExchange(似乎是参数) getRateOfExchangeRequest getRateOfExchangeResponse 我尝试了这些类的每一种排列方式及其方法,但没有任何效果。直观地说,您希望创建一个以parame
CharterServices.charterServiceClient proxy = new CharterServices.charterServiceClient();
using (OperationContextScope scope = new OperationContextScope(proxy.InnerChannel));
{
using (proxy as IDisposable)
{
var response = 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()方法需要getRateOfExchange对象,因此无法编译上述代码。getRateOfExchange类包含的参数是proxy.getRateOfExchange()方法的参数。我已尝试创建该类的实例并将其传递给上面的方法,如下所示:
CharterServices.charterServiceClient proxy = new CharterServices.charterServiceClient();
using (OperationContextScope scope = new OperationContextScope(proxy.InnerChannel));
{
using (proxy as IDisposable)
{
var response = 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();
}
}
假设
rateofchange
是一个整数列表
,我刚刚添加了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();
List rateofchange=new List();
对于(int i=0;i系统抛出了一个未被捕获的异常,因此组件模型决定挂起!现在修复了它。我不确定您所说的“挂起”是什么意思,但如果您将一个对象作为参数传递,则它需要有一个DataContract。当您创建一个新的WCF应用程序时,代码中有一个示例,或者请参见此处:与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参见"。将<代码>与WCF代理一起使用<代码>被认为是不好的做法:我使用类似的代码从我的服务中获取汇率,但正如我所说的,在调用服务时它会挂起。我所说的挂起是指进入服务代码中运行并且永不返回。我到底会做错什么?感谢Tim的链接,这非常有趣。我将检查我的代码并应用此模式!我使用了类似的代码从我的服务获取汇率,但正如我所说的,在调用服务时它会挂起。我所说的挂起是指进入服务代码以运行并永不返回。我到底会做错什么?再次尝试重新生成代理。也许您的参数rateOfExchange是too太大或太长。或者服务中有一些错误。您是否使用WCF测试客户端单独测试了服务?