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 interfaceC#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# クラスを生成するために proto を (手動で) 作成します。

于 2010-09-13T13:47:50.607 に答える