71

Webサービスを参照するコードがあり、そのWebサービスのアドレスを動的(データベース、構成ファイルなどから読み取る)にして、簡単に変更できるようにしたい。これの主な用途の1つは、マシン名とIPアドレスが異なる複数の環境に展開することです。Webサービスの署名は、他の場所にあるすべてのデプロイメントで同じになります。

Visual Studioの「Web参照の追加」ウィザードに甘やかされたばかりかもしれませんが、これは比較的簡単なことのようです。

4

11 に答える 11

59

Web参照を生成し、ソリューションエクスプローラーでWeb参照をクリックするとき。プロパティペインに次のようなものが表示されます。

Web参照プロパティ

値をdynamicに変更すると、app.configにエントリが追加されます。

詳細については、CodePlexの記事をご覧ください。

于 2008-09-24T04:24:55.363 に答える
31

これを本当に動的に設定する場合は、呼び出しているプロキシ クラスのインスタンスの .Url フィールドを設定する必要があります。

プログラム内から .​​config ファイルの値を設定します。

  1. 混乱です;

  2. 次のアプリケーション起動まで読み取れない場合があります。

インストールごとに 1 回だけ実行する必要がある場合は、他のポスターに同意し、.config ファイルと動的設定を使用します。

于 2008-09-24T14:56:22.973 に答える
22

これが古い質問であることは承知していますが、私たちの解決策はここにあるものよりもはるかに簡単です。VS2010 以降での WCF 呼び出しに使用します。文字列 URL は、アプリの設定または別のソースから取得できます。私の場合、ユーザーがサーバーを選択するドロップダウンリストです。TheService は、VS 追加サービス参照を通じて構成されました。

private void CallTheService( string url )
{
   TheService.TheServiceClient client = new TheService.TheServiceClient();
   client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
   var results = client.AMethodFromTheService();
}
于 2016-11-30T14:55:33.830 に答える
9

私はこの問題に数日間苦労しましたが、ついに電球がカチッと音を立てました。実行時に Web サービスの URL を変更できるようにするための鍵は、部分的なクラス宣言で行ったコンストラクターのオーバーライドです。上記の、URL の動作を動的に設定することも行う必要があります。

これは基本的に Web サービス ラッパーを作成し、ある時点で Web サービスをリロードする必要がある場合に、サービス参照の追加を介して作業を失うことはありません。部分クラスに関する Microsoft のヘルプでは、この構造体の理由の一部は Web サービス ラッパーを作成することであると特に述べています。 http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.100).aspx

// Web Service Wrapper to override constructor to use custom ConfigSection 
// app.config values for URL/User/Pass
namespace myprogram.webservice
{
    public partial class MyWebService
    {
        public MyWebService(string szURL)
        {
            this.Url = szURL;
            if ((this.IsLocalFileSystemWebService(this.Url) == true))
            {
                this.UseDefaultCredentials = true;
                this.useDefaultCredentialsSetExplicitly = false;
            }
            else
            {
                this.useDefaultCredentialsSetExplicitly = true;
            }
        }
    }
}
于 2013-06-27T12:51:11.507 に答える
5

URLの動作を「動的」に変更します。

于 2008-09-24T04:22:43.697 に答える
4

Web サービス メソッドとその下にある公開されたクラスが変更されない限り、それはかなり簡単です。Visual Studio 2005 (およびそれ以降) では、Web 参照を追加すると、この URL を持つ app.config (または Web アプリの場合は web.config) セクションが作成されます。目的の URL を反映するように app.config ファイルを編集するだけです。

私たちのプロジェクトでは、環境の種類 (開発、テスト、運用) ごとに app.config エントリにコメントを付けるだけの簡単なアプローチでした。そのため、目的の環境タイプのエントリのコメントを外します。特別なコーディングは必要ありません。

于 2008-09-24T05:31:11.910 に答える
3

静的と動的の違いについてのメモです。

  • Static : Web サービスを呼び出すたびに URL プロパティを設定する必要があります。これは、Web サービスの場合のベース URL がプロキシ クラス コンストラクタにあるためです。
  • 動的: web.configファイルに特別な構成キーが作成されます。デフォルトでは、プロキシ クラスはこのキーから URL を読み取ります。
于 2008-09-24T06:13:31.047 に答える
2

データベースからURLをフェッチする場合は、手動でWebサービスプロキシクラスのURLプロパティに割り当てることができます。これは、Webメソッドを呼び出す前に実行する必要があります。

構成ファイルを使用する場合は、プロキシクラスのURLの動作を動的に設定できます。

于 2008-09-24T04:30:18.033 に答える
1

間違いなく Url プロパティを使用する方法です。app.config、データベース、または 3 番目の場所に設定するかどうかは、構成のニーズによって異なります。Web サービスの場所を変更したときにアプリを再起動したくない場合があります。バックエンドをスケーリングするロード バランサーがない可能性があります。Web サービスのバグにホット パッチを適用している可能性があります。実装にもセキュリティ構成の問題がある可能性があります。それが実稼働データベースのユーザー名とパスワードであろうと、ws セキュリティ認証情報であろうと。職務を適切に分離することで、より複雑な構成設定を行うことができます。

プロキシで生成されたクラスにラッパー クラスを追加すると、ラッパー クラスを作成して Web メソッドを呼び出すたびに、何らかの統一された方法で Url プロパティを設定できます。

于 2008-09-24T15:19:52.963 に答える
0

私にとって WebService への参照は

サービスリファレンス

.

とにかくとても簡単です。誰かが言ったように、web.config ファイルの URL を変更するだけです。

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="YourServiceSoap" />
      </basicHttpBinding>
    </bindings>
    <client>
        **** CHANGE THE LINE BELOW TO CHANGE THE URL **** 
        <endpoint address="http://10.10.10.100:8080/services/YourService.asmx"
          binding="basicHttpBinding" bindingConfiguration="YourServiceSoap"
          contract="YourServiceRef.YourServiceSoap" name="YourServiceSoap" />
    </client>
于 2016-05-11T13:02:59.073 に答える
0

ソリション エクスプローラーを開く

Web サービスを右クリックし、URL 動作を動的に変更します

ソリューション エクスプローラーで [すべてのファイルを表示] アイコンをクリックします。

Web リファレンスで、Reference.cs ファイルを編集します。

コンストラクターの変更

public Service1() {
        this.Url = "URL"; // etc. string  variable this.Url = ConfigClass.myURL
      }
于 2016-02-22T21:08:23.300 に答える