none
メタデータからクライアントコード生成時の制限 RRS feed

  • 質問

  • #VB2005,Framework3.0

    #TcpBinding,Windowsサービスホスト

     

    正常動作していたWCFサービスのインターフェースにいくつかメンバを増やしました。

    SvcUtil.exeでクライアントコードを生成しようとしたところ、

    エンドポイントが無い可能性があると、よく出るCannnot obtain metadataエラーになりました。

    調べたところ、

    ・インターフェースの定義は正しい。

    ・全部でメンバが60個ある。

    ・十数個の任意のメンバをコメントアウトしたりしたら正常に生成できるが、そのメンバに規則性が無い。

    というような状態です。

    どうも定義関係は無関係のようで、数の制限かと想像しています。

     

    クライアント生成、つまりメタデータに関連した制限のようなものがあるのかどうかの情報を探しております。

    #絶対量やシンボル名の合計文字数とか?

     

    些細な情報でもかまいませんので情報があればお願いします。

     

    2008年3月28日 3:08

回答

  • こんにちは。中川俊輔 です。

     

    ネットクラゲさん、回答ありがとうございます。

     

    まどかさん、フォーラムのご利用ありがとうございます。

     

    USのフォーラムに参考になりそうなスレッドがありましたので、下記にリンクを張っておきます

    svcutil throws error when generating proxy with mextcpbinding

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2918693&SiteID=1

     

    参考になると幸いです。

     

    それでは!

     

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。

    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。

    詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    2008年4月3日 6:41

すべての返信

  • メタデータの取得がネットワーク経由の場合は、5分でタイムアウトするみたいですが、

    これでは?

    http://msdn2.microsoft.com/ja-jp/library/aa347733.aspx

    (1個目の注意の下)

     

    2008年3月28日 17:36
  • 返信ありがとうございます。

     

    いやぁ、3,4秒でエラーになりますからタイムアウトではないですね。メッセージも違うし。

     

    たとえばインターフェースをA,B,Cの3つ追加してエラーの場合

    ・A,Bコメントアウトで正常

    ・A,Cコメントアウトで正常

    ・B,Cコメントアウトで正常

    ってな具合で、わけがわからんです。

     

    2008年3月31日 8:08
  • こんにちは。中川俊輔 です。

     

    ネットクラゲさん、回答ありがとうございます。

     

    まどかさん、フォーラムのご利用ありがとうございます。

     

    USのフォーラムに参考になりそうなスレッドがありましたので、下記にリンクを張っておきます

    svcutil throws error when generating proxy with mextcpbinding

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2918693&SiteID=1

     

    参考になると幸いです。

     

    それでは!

     

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。

    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。

    詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    2008年4月3日 6:41
  •  中川俊輔 - MSFT さんからの引用

    svcutil throws error when generating proxy with mextcpbinding

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2918693&SiteID=1

     

    情報ありがとうございます。

    見たところ64K制限があるようですね。

    提示されている方法について試してみます。

    実際問題として開発が完全に止まってしまうことではないので、最悪コーディングすればよいわけですが、

    エンタープライズアーキテクチャとしては普通にありえる設計だと思うので、制限は何とかして欲しい気がしています。

    #サービスメンバが増えるほど自動生成の利用価値が高くなるので。

     

    あとは、VS2008版(SvcUtil3.5)ではどうなんだというところですかね。

    #それがあればですが。

     

    2008年4月4日 0:32
  • 無事自動生成できましたので結果報告します。

    ※net.tcpの場合です。

     

    ・svcutil.exe.config

    ※プログラムフォルダにあるsvcutil.exeを別フォルダにコピーして、同じフォルダに置く。

    ※name="net.tcp" はサービスのプロトコルに合わせてください。(自分で決める名前ではありません)

     

    Code Snippet

    <configuration>

    <system.serviceModel>

    <client>
        <endpoint binding="netTcpBinding"
            bindingConfiguration="myTcp" contract="IMetadataExchange"
            name="net.tcp" />
    </client>

    <bindings>
        <netTcpBinding>
            <binding name="myTcp" maxBufferPoolSize="60000000" maxBufferSize="60000000"
                maxReceivedMessageSize="60000000">
                <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                    maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                <security mode="None" />
            </binding>
        </netTcpBinding>
    </bindings>

    </system.serviceModel>

    </configuration>

     

     

    ・コマンド

    ※サービスを起動し、上記のコピーしたsvcutil.exeを実行します。

     

    Code Snippet
    svcutil /language:vb /out:WcfServiceClient.vb net.tcp://localhost:8081/MyService/mex

     

     

    ※最後のアドレスはサービス側のConfigにあわせてください。

    2008年4月4日 2:36