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 问题:请求和响应类

其实一点

也不痛苦。生成代理/客户端类后,只需创建客户端的实例,然后调用这些方法,就好像它们是本地方法调用一样。

无法在这里解释整个过程,但我会向您推荐我一年多前写的介绍,它用一个简单的例子解释了整个过程。

甚至可以在编写自己的客户端之前使用 WCF 测试客户端测试服务。如果使用服务引用,则编写客户端非常容易。

以下是该博客文章中代码的摘录,说明了如何使用客户端代码,为简洁起见,修改为具有using块并使用 var 关键字:

    static void Main(string[] args)
    {
        using (var service = new ServiceReference1.Service1Client())
        {
            var response = service.GetData(5);
            Console.WriteLine(response);
            Console.ReadLine();
        }
    }

系统抛出了一个未被捕获的异常,因此组件模型决定挂起!现在修复它。

假设rateOfExchangeintegersList,我刚刚在其中添加了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();

希望对您有所帮助。