1

我在我的应用程序中使用 WCF 服务。我的计划是设计服务合同如下:

[ServiceContract]
public interface IService
{

    [OperationContract]
    object ServiceCall(string typeName, string methodName,  object[] methodParameters);
}

我将通过客户端的给定参数调用 ServiceCall 方法。

然后在服务器端我将创建方法信息并调用指定的方法并将响应返回给客户端。通过这种方式,单一方法将解决我所有的远程调用。由于 WCF 中的已知类型问题,我无法创建此类服务。返回类型和方法参数对象 [] methodParameters 不能是对象类型

我怎么解决这个问题?或者我能做什么?

4

1 回答 1

1

为什么定义明确的数据和服务合同更可取的一些原因是:

  • 它使您的消费者清楚地了解您的服务的期望。没有它,您会增加您的文档要求
  • 使您的服务更容易被发现和使用
  • 允许 WCF 对消息进行类型检查
  • 允许详细控制对象的(反)序列化方式

但是,如果你想用一个操作来统治它们,你可以尝试这样的事情:

[ServiceContract]
public interface IService
{

    [OperationContract]
    MyResponse ServiceCall(IMyRequest request);
}

您的 IMyRequest 将类似于:

public interface IMyRequest{
    string TypeName {get; set}
    string MethodName {get; set;}
}

然后,您将使用每次调用所需的参数对象对其进行扩展,并使用 KnownTypes 对其进行装饰。你无法真正解决这个问题。由于 WCF 不允许您仅指定“对象”(并且不应该因为双方都需要知道他们在说什么),您至少需要明确定义您的请求对象。可以使用单个 OperationContract 方法,但正如我上面提到的,我认为您最好使用显式操作。

于 2012-10-28T01:20:32.270 回答