WCF问题:请求和响应类

时间:2015-01-11 16:35:02

标签: c# wcf

有人向我解释请求和响应模型在WCF中的工作原理吗?我有一个简单的服务,它使用一个返回rateOfExchange []的整数参数公开一个名为getRateOfExchange的方法,但是从该服务生成的Reference.cs文件包含许多类:

getRateOfExchange(似乎是参数)

getRateOfExchangeRequest

getRateOfExchangeResponse

我已尝试过这些类及其方法的每个排列,但没有任何作用。直观地说,您希望创建一个以参数object作为参数的请求对象,然后将此请求传递给执行请求到服务器的响应的方法。

但不。

一定很痛苦。

有人可以解释一下吗?

更新

谢谢Gigi,但我的课程看起来不像。

如果我关注您的模型,我的请求将如下所示:

CharterServices.charterServiceClient proxy = new CharterServices.charterServiceClient();

using (OperationContextScope scope = new OperationContextScope(proxy.InnerChannel));
{
    using (proxy as IDisposable)
    {
        var response = proxy.getRateOfExchange()
    }
}                    

但是,我的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()时它会挂起。

Aaargh!我知道该服务正在运行,因为我可以在SoapUI中执行相同WSDL的请求。

你能帮忙吗?

3 个答案:

答案 0 :(得分:1)

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

我无法解释这里的整个过程,但我会转而提到你一年前写的intro,它用一个简单的例子来解释整个过程。

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

以下摘自该博客帖子中的代码,说明如何使用客户端代码,修改为using块并使用var关键字简化:

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

            Console.ReadLine();
        }
    }

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

假设rateOfExchangeList integers,我刚刚添加了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();

希望它有所帮助。