【问题标题】:How do I pass multiple parameters to a WCF Restful service from a c# client?如何从 c# 客户端将多个参数传递给 WCF Restful 服务?
【发布时间】:2016-05-18 09:36:04
【问题描述】:

我有一个需要多个参数的 WCF Restful 服务调用。

考虑以下数据和服务合同。

public class ClassA
{
   public string aString{ get; set;}
   public int aInt {get; set;}
}

public class ClassB
{
   public string bString{ get; set;}
   public int bInt {get; set;}
}

[ServiceContract]
public interface ISampleService
{
   [OperationContract(IsOneWay = false)]
   ClassC GetSomeData(ClassA classA, string sValue, ClassB classB);
}

我有一个基于 C#/winform 的测试应用程序。 我知道在调用服务之前需要包装所有这些参数。 我很难弄清楚调用服务的 C# 代码在客户端会是什么样子。

谁能给我一个示例,说明我将如何在客户端构建代码以调用上述定义的服务?

谢谢, JB

【问题讨论】:

  • 你确定你有 RESTfull 服务吗?您的应用程序是否需要它?纯 WCF 和 REST 服务有很大区别。
  • MF:此服务支持 SOAP 和 RESTFul 接口。我有一个简单的基于 C# 的 winforms 测试应用程序,我可以在其中测试所有服务调用。我对 RESTFul/多参数案例很感兴趣。

标签: c# wcf wcf-rest


【解决方案1】:

我想出的最简单的方法是创建一个接受 ArrayList 的 RESTFul 接口。

在客户端,将所需的复杂参数(类)序列化为字符串,然后插入到 ArrayList 中。

在服务方面: 1) 验证 ArrayList 是否包含所需数量的参数 2) 从传入的 ArrayList 中反序列化复杂对象

我不确定这是否是最优雅或“公认”的方式,但它确实有效。

【讨论】:

    【解决方案2】:

    在为ISampleService 设置端点后,您应该能够像普通方法一样调用服务。

    var result = ISampleService.GetSomeData(
        new A { aString = "A string" }, 
        "someValue", 
        new B()
    );
    

    WCF 神奇地将其转换为远程过程调用。只需确保您要传递的所有参数都是可序列化的。

    【讨论】:

    • GP:如果我正在测试基于 SOAP 的接口,这将起作用。这是一个 RESTFul 接口;我是否必须通过 WebRequest.Create(uri) 生成我的呼叫?
    • 抱歉,忘记在服务定义中包含 RESTful 装饰:[WebInvoke(Method = "POST", UriTemplate = "/GetSomeData", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle .WrappedRequest)]
    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多