トップ回答者
メタデータからクライアントコード生成時の制限

質問
-
#VB2005,Framework3.0
#TcpBinding,Windowsサービスホスト
正常動作していたWCFサービスのインターフェースにいくつかメンバを増やしました。
SvcUtil.exeでクライアントコードを生成しようとしたところ、
エンドポイントが無い可能性があると、よく出るCannnot obtain metadataエラーになりました。
調べたところ、
・インターフェースの定義は正しい。
・全部でメンバが60個ある。
・十数個の任意のメンバをコメントアウトしたりしたら正常に生成できるが、そのメンバに規則性が無い。
というような状態です。
どうも定義関係は無関係のようで、数の制限かと想像しています。
クライアント生成、つまりメタデータに関連した制限のようなものがあるのかどうかの情報を探しております。
#絶対量やシンボル名の合計文字数とか?
些細な情報でもかまいませんので情報があればお願いします。
回答
-
こんにちは。中川俊輔 です。
ネットクラゲさん、回答ありがとうございます。
まどかさん、フォーラムのご利用ありがとうございます。
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 をご覧ください。
すべての返信
-
メタデータの取得がネットワーク経由の場合は、5分でタイムアウトするみたいですが、
これでは?
http://msdn2.microsoft.com/ja-jp/library/aa347733.aspx
(1個目の注意の下)
-
こんにちは。中川俊輔 です。
ネットクラゲさん、回答ありがとうございます。
まどかさん、フォーラムのご利用ありがとうございます。
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 をご覧ください。
-
中川俊輔 - MSFT さんからの引用 svcutil throws error when generating proxy with mextcpbinding
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2918693&SiteID=1
情報ありがとうございます。
見たところ64K制限があるようですね。
提示されている方法について試してみます。
実際問題として開発が完全に止まってしまうことではないので、最悪コーディングすればよいわけですが、
エンタープライズアーキテクチャとしては普通にありえる設計だと思うので、制限は何とかして欲しい気がしています。
#サービスメンバが増えるほど自動生成の利用価値が高くなるので。
あとは、VS2008版(SvcUtil3.5)ではどうなんだというところですかね。
#それがあればですが。
-
無事自動生成できましたので結果報告します。
※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 Snippetsvcutil /language:vb /out:WcfServiceClient.vb net.tcp://localhost:8081/MyService/mex※最後のアドレスはサービス側のConfigにあわせてください。