2

我在我正在为数据合同工作的项目中使用 protobuf-net,.proto手动创建文件并让自定义工具喷出它正在执行的 C# 代码。我也开始将它用于服务合同,并且服务接口也创建得很好。

为了连接到某些系统,我正在使用 WCF,因此我启用了datacontracts生成器选项,尽管System.ServiceModel存在属性,但我似乎没有任何方法可以声明服务可能引发的特定故障。

所以我的问题基本上是:

  • Protocol Buffers 语言似乎没有任何异常/故障结构。
  • 我看不到任何用于生成 FaultContract 属性的 protobuf-net 选项。
  • protobuf-net 生成的接口未声明为部分的,因此我无法扩充生成的代码。

有没有办法在 protobuf-net 中声明服务 WCF 操作错误,或者这是我必须等待第 2 版的东西?

非常感谢。

4

2 回答 2

2

我不知道为什么我不将其声明为partial interface,因为这在 C# 2.0 中似乎非常快乐;当我得到第二个时,我会改变它,但请注意,您可以在本地应用手动更改 - 只需编辑 csharp.xslt 文件。现在,xslt 不是每个人都喜欢,但应该是 1 行变化(接近单词interface)——实际上,很可能是partial这里的添加:

<xsl:template match="ServiceDescriptorProto">
    <xsl:if test="($optionClientProxy or $optionDataContract)">
    [global::System.ServiceModel.ServiceContract(Name = @"<xsl:value-of select="name"/>")]</xsl:if>
    public /* HERE => */ partial /* <= HERE */ interface I<xsl:value-of select="name"/>
    {
      <xsl:apply-templates select="method"/>
    }

    <xsl:if test="$optionProtoRpc">
    public class <xsl:value-of select="name"/>Client : global::ProtoBuf.ServiceModel.RpcClient
    {
      public <xsl:value-of select="name"/>Client() : base(typeof(I<xsl:value-of select="name"/>)) { }
      <xsl:apply-templates select="method/MethodDescriptorProto" mode="protoRpc"/>
    }
    </xsl:if>
    <xsl:apply-templates select="." mode="clientProxy"/>

</xsl:template>

由于 xslt 是可调整的,因此您应该能够应用您需要的任何其他更改。

于 2010-09-14T11:14:47.180 回答
0

这并不能直接回答您的问题,但无论如何可能是合适的
protobuf-net 不需要 .proto 文件才能工作,因此只需编写 C# 类并用 WCF 属性(以及您的 FaultContract属性)而不是为了生成 C# 类而(手动)创建原型。

于 2010-09-13T13:47:50.607 回答