2009-11-06 174 views
0

我正尝试仅使用由用户提供的一组参数创建消息,并通过从WCF中的OperationDescription对象中提取输入消息解决了MessageDescription。从消息描述中创建消息

看起来很简单,但我似乎无法找到关于如何使用Body.WrapperElementName和MessageDescription中描述的各种消息部分的设置的信息。

是否有任何WCF专家可以帮助我了解这个相当复杂的问题?

回答

0

我不认为这个功能实际上是直接暴露出来的。

我还没有试过这个,但花了一点时间用反射器,如果你不介意弄脏你的手并使用一点思考,一个选项可能是使用Activator.CreateInstance()创建一个新的System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter类的实例,它实现IClientMessageFormatter接口。

下面是构造函数的参数:

  • OperationDescription描述
  • DataContractFormatAttribute dataContractFormatAttribute
  • DataContractSerializerOperationBehavior serializerFactory

请注意,在任何情况下,你需要充分OperationDescription对象,但看起来你无论如何都可以访问它。

然后,这只是要求SerializeRequest()。

+0

感谢您的指点。我会尝试一下。而且由于我使用动态,它已经很慢,所以更多的思考应该不重要;) – 2009-11-08 12:48:28

+0

尝试它,它有点作品。目前它失败了,因为我在DynamicObject派生类中使用了错误的参数类型和返回类型,但我到了那里。我可以创建一个新类型的实例并使用它来序列化我的操作的参数。 – 2009-11-08 16:27:14

0

如果您可以创建一个[MessageContract]类型来表示消息,那么您可以使用TypedMessageConverter类。

或者,您可能可以使用DataContractSerializerOperationBehavior执行此操作。你需要'扼杀'一些存根,比如OperationDescription。

在学习MessageDescription本身和各种参数方面,我建议创建一个[ServiceContract]接口,就像你想看到的一样,然后使用ContractDescription.GetContract加载ContractDescription并检查MessageDescriptions对象。你可以看到WCF使用什么默认设置等等。

如果您有关于特定属性的问题,我可能会提供帮助。