- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我们的生产环境中,我们的 WCF 服务使用 XMLSerializer 序列化。为此,我们的服务接口(interface)具有 [XMLSerializerFormat] 属性。现在,我们需要更改为 DataContractSerializer,但我们必须与现有客户端保持兼容。因此,我们必须使用两个序列化器公开每个服务。
我们有一个约束:我们不想重新定义每个合约接口(interface)两次,我们有 50 个服务合约接口(interface),我们不想拥有
IIncidentServiceXml
IIncidentServiceDCS
IEmployeeServiceXml
IEmployeeServiceDCS
IContractServiceXml
IContractServiceDCS
我们怎样才能做到这一点?
更多信息
这是对我们迄今为止尝试过的方法的描述,但我愿意尝试完全不同的方法:
我们试图通过我们自己的 ServiceHostFactory 类中的代码创建所有端点。基本上我们创建每个端点两次。问题是在运行时,WCF 提示该服务有两个具有相同联系人名称但具有不同 ContractDescription 实例的终结点。该消息说我们应该使用不同的契约(Contract)名称或重用相同的 ContractDescription 实例。
其他尝试:
我们还尝试通过为每个 ContractDescription 实例使用不同的命名空间来做到这一点。这样我们将保持相同的契约(Contract)接口(interface) (IIncidentService) 但具有两个不同的命名空间:
http://ourcompany/XML/IIncidentService
http://ourcompany/DCS/IIncidentService
有了它,我们能够走得更远,但服务因奇怪的异常而崩溃:
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.XmlSerializerOperationBehavior
contract: http://ourcompany.cs/XML:IUserServiceWCF ----> System.NullReferenceException: Object reference not set to an instance of an object.
at System.ServiceModel.Description.XmlSerializerMessageContractExporter.ExportFaults(Object state)
at System.ServiceModel.Description.MessageContractExporter.ExportMessageContract()
at System.ServiceModel.Description.XmlSerializerOperationBehavior.System.ServiceModel.Description.IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext contractContext)
at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext, IWsdlExportExtension extension)
最佳答案
简短的回答是,你不能,正是因为你的错误消息所说的原因,你不能有太多具有相同名称的端点,而这实际上是你试图做的。我认为你将不得不完全按照你所说的去做你不想做的事。
This might be your only option
The problem is that to specify a service is to use the XmlSerializer you need to declare the [XmlSerializerFormat] attribute on the service or the contract. Well since we want to use the same for both endpoints we can’t place it there, so we are left with placing it on the contract. However, when it boils down to it, both endpoints are using the same service and vicariously the same contract right?
Well, it doesn’t have to be so. You could have a contract A derive from contract B, then have the service implement contract A such that everything in both contracts is part of the service. For this example though, contract B will be our standard contract, and contract A will be an interface that just defines the [XmlSerializerFormat] attribute.
但我不能向您保证,您现有的客户端代码无需更改即可使用。
关于c# - 如何为同一主机上的同一契约(Contract)同时支持 DataContractSerializer 和 XMLSerializer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025762/
在我的 Visual Studio 2010 项目中,我使用以下 Post-Build 事件命令行使用 sgen 创建 XmlSerializers.dll。 构建后事件: "$(ProgramFil
我用 XMLSerializer 类做了一些事情。像大多数初学者一样,我在应用程序启动时遇到性能问题。我阅读了很多博客、文章,最后使用了 SGEN 工具。现在性能看起来还不错,但我还有一些不清楚的地方
过去 2 天我一直被这个问题困扰,但仍然没有解决,我正在寻求帮助。 我的 Listbox根据在 Combobox 中选择的项目,获取添加到其中的生成项目.当我点击按钮时 Create出现一个带有 We
我正在尝试解决如何生成一些 Xml,它使用 XmlSerializer 的一组类中的前缀不仅仅是微不足道的使用。我还希望能够读取相同的 Xml(这相当简单,但随着我使用更复杂的属性似乎消失了。 具体用
XmlSerializer 很难(= 不)反序列化包含表情符号字符的内容,例如 ��。我读过这样的字符在 XML 标准中实际上是非法的;但是,如果我想忠实地表示包含表情符号的聊天对话,则需要它们。如何
我将 XmlSerializer 用于 WCF 服务(就我的服务而言,这是有原因的)。但是最近我遇到了这个问题:我找不到一种简单的方法来使引用类型属性成为必需的,即使其在 XSD 中的定义如下所示:
假设您有两个类,一个继承另一个类,并且子类需要使用 XmlSerializer 进行序列化/反序列化。但是,父级包含一个不可序列化的成员,例如字典。 public class Parent {
我正在尝试使用 XmlSerializer 解析具有如下所示元素的 XML。 amount 元素下有相当多的货币类型,我想将它们反序列化为一个对象集合,这些对象具有保存货币类型的字符串属性和保存金额的
我正在用 Javascript 生成 KML 文档,并尝试使用 XMLSerializer生成 XML 文件,但它生成所有小写标签,即使我在 DOM 中以大写形式创建标签。 是 DOM 破坏了大小写还
我有一小段代码可以将 XML 解析为 JSON。它工作得很好,直到我引入 XMLSerializer 来获取 JSON。 public static String convertXMLFileToSt
假设您有两个类,一个继承另一个,子类需要使用 XmlSerializer 进行序列化/反序列化。但是,父级包含一个不可序列化的成员,比如字典。 public class Parent { pu
我正在尝试使用 XmlSerializer 解析具有如下所示元素的 XML。 amount 元素下有相当多的货币类型,我想将它们反序列化为一个对象集合,这些对象具有保存货币类型的字符串属性和保存金额的
我正在尝试将继承属性的所有成员序列化 (XmlSerializer) 作为特性。 两个类: public class Tree { public Point Location { get; s
我在使用 XmlSerializer 时遇到了修剪字符串的问题, 当使用 XmlReader 时。 IgnoreWhitespace 选项显示无效,元素字符串仍包含\n 和空格。 有什么方法可以“即时
我有以下扩展方法来序列化我的类.... public static string SerializeToXml(this object obj) {
我正在尝试反序列化以下 XML(摘录): Waking The Demon Bullet For My Valentine false B
我在使用 .NET 中的 XmlSerializer 时遇到了一些问题。 这里我有一个我刚刚建立的小例子。 (也可用 @ gist https://gist.github.com/2d84be9041
我从 DTD(通过 XSD 和 xsd.exe)为我的 C# 项目创建了类,因此我可以轻松地将它们反序列化为代码中的模型类。 我大致是这样的: XmlReaderSettings readerSett
我使用 XSD.EXE 将 XSD 转换为对象。这很好用,我可以很好地使用 XMLSerializer 反序列化,除了作为数组生成的子元素不会填充。 private SubElements[]
对不起我的英语。我有 XmlSerializer 的奇怪之处。这是我的代码 [Serializable] public class Radio { public bool hasSubWoof
我是一名优秀的程序员,十分优秀!