2

VS2008にいくつかのWebサービス参照を含むWPFアプリケーションがあります。さまざまな理由(最大メッセージサイズ、認証方法)のために、サービスバインディングのWPFクライアントのapp.configでいくつかの設定を手動で定義する必要があります。

残念ながら、これは、プロジェクトのサービス参照を更新すると、複数のバインディングとエンドポイントという混乱が発生することを意味します。Visual Studioは、数値の接尾辞(つまり、「Service」の複製としての「Service1」)を使用して新しいバインディングとエンドポイントを作成します。プロジェクト内のサービス参照ごとに1つのバインディングしかないため、構成が無効になります。

これは簡単に複製できます。ソリューションで単純な「HelloWorld」ASP.NetWebサービスとWPFアプリケーションを作成し、app.configバインディングのmaxBufferSizeとmaxReceivedMessageSizeを変更してから、サービス参照を更新するだけです。

現時点では、参照を更新した後にapp.configのチェックアウトを元に戻すことでこれを回避していますが、もっと良い方法があるはずだと思わずにはいられません。

また、手動で変更する必要がある設定は次のとおりです。

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

と:

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

サービスファクトリクラスを使用しているため、これらの設定をプログラムで設定できる場合は、プロパティが公開されていないように見えますが、機能します。

4

5 に答える 5

2

プロジェクトに適した設定を持つ、プロキシ生成用のsvcutilを使用する.Batファイルを作成します。かなり簡単です。batfileをクリックすると、インターフェイスが変更されたときに新しいプロキシファイルを生成するのは簡単です。

その後、バッチを自動ビルドで使用できます。次に、app.config(またはweb.config)を一度だけ設定する必要があります。通常、dev、test prodなど、環境ごとに異なる構成を分離します。

例(改行に注意してください):

REM generate meta data
call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"

REM making sure the file is writable
attrib -r "MyServiceProxy.cs"

REM create new proxy file
call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll" 

:)

// W

于 2008-09-16T05:47:35.070 に答える
2

生成されたエンドポイントを変更するのではなく、必要な構成で 2 番目のエンドポイントとバインディング定義を追加し、コードで新しいエンドポイントの名前をサービス クライアント コンストラクターに入れるだけです。

于 2008-09-16T14:49:24.393 に答える
0

どういうわけか、Visual Studioの「サービス参照の追加」機能を使用するよりもsvcutil.exeを直接使用する方が好きです:Pこれは、WCFプロジェクトで行っていることです。

于 2008-09-16T03:24:35.973 に答える
0

私はあなたの主張を理解しています.svcutilは、サービス参照を追加および更新するためのより高度な方法であることは間違いありません. 「右クリックして参照を更新」が1つのステップで作業することに非常に近い場合、それはかなり多くの手作業です。

リファレンス コードを出力するだけのバッチ ファイルなどを作成できると思います。その場合でも、svcutil を使用してサービス コードを手動でチェックアウトして更新することは、おそらく構成のチェックアウトを元に戻すよりも手間がかかります。

いずれにせよアドバイスをありがとう。

于 2008-09-16T05:15:15.443 に答える
0

svcutil.exe ユーティリティによって自動生成された app.config ファイルと *.cs ファイルを (ソース管理から) チェックアウトし、svcutil.exe を実行するバッチ ファイルを実行して、サービス メタデータを取得します。完了したら、コードを再コンパイルし、動作することを確認してから、更新された app.config ファイルと *.cs ファイルをチェックインします。これは、Visual Studio でバグの多い [サービス参照の追加] を使用するよりもはるかに信頼性が高くなります。

于 2008-09-17T06:27:32.140 に答える