代码之家  ›  专栏  ›  技术社区  ›  Paul Ruane

从.proto-rpc条目生成FaultContract属性

  •  2
  • Paul Ruane  · 技术社区  · 16 年前

    我使用protobufnet在我为数据合同工作的项目中,创建 .proto

    为了连接到某些系统,我使用WCF,所以我启用了 datacontracts 发电机选项和 System.ServiceModel 属性存在时,似乎没有任何方法可以声明服务可能引发的特定错误。

    所以我的问题基本上是:

    • 我看不到任何protobuf net选项来生成FaultContract属性。
    • protobuf net生成的接口没有声明为partial,因此我无法扩充生成的代码。

    有没有办法在protobufnet中声明服务WCF操作错误,或者这是我必须等待版本2的原因?

    非常感谢。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Marc Gravell    16 年前

    partial interface ,因为这在C#2.0中看起来非常好;我会在有时间的时候更改它,但是请注意,您可以在本地应用手动更改—只需编辑csharp.xslt文件文件。现在,xslt并不是每个人都喜欢的,但它应该是一个单行更改(接近单词) 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>
    

        2
  •  0
  •   wal    16 年前

    这不是直接回答你的问题,但可能是适当的无论如何
    protobuf-net不需要.proto文件来工作,因此只编写C#类并用WCF属性(和FaultContract属性)装饰它们与创建proto(手动)以生成C#类所需的工作量是相同的。