4

SharePoint でイベント ハンドラーを作成しているときに、この問題に遭遇しました。イベント ハンドラーには Web 参照があります。この Web 参照を作成すると、Web サービスの URL がアセンブリの .config ファイルに追加されます。Web 参照 URL を変更する必要がある場合は、構成ファイル内のリンクを変更するだけです。

dllをGACしようとすると問題が発生します。DLL を GAC すると、構成ファイルを dll と一緒に GAC できないため、Web 参照を更新する方法がありません。

私が見つけた1つの回避策は、参照を追加するときにVisual Studioによって自動生成されるコンストラクターメソッドReference.csクラスを変更して、コンストラクターが他の場所、たとえばレジストリまたはXMLファイルからWebサービスURLを読み取るようにすることです所定の場所。しかし、Visual Studio を使用して Web リファレンスを更新すると、この Reference.cs ファイルが再生成され、すべての変更が失われるため、問題が発生することがあります。

この問題を解決するより良い方法はありますか?

4

4 に答える 4

2

SharePointでホストされているアプリケーションはすべて、IISのSharePointWebサイトのルートにあるweb.configを使用しています。行う必要があるのは、Web/サービス参照ウィザードによって生成された構成をweb.configに追加することです。

これは大まかにそれがどのように機能するかです:

  • SharePointアプリケーションプールがDLLをロードします
  • DLLは、現在のアプリケーション構成ファイルでサービス情報を探します
  • DLLはweb.configを見つけ、そこで構成情報を探します

基本的に、DLLで生成されているapp.configは使用されません。この場合のアプリケーションは、SharePointアプリケーションをホストしているアプリケーションプール(w3wp.exe)です。SharePointの場合、app.configは実際にはweb.configという名前で、SharePointWebサイトのルートに存在します。

于 2008-09-24T04:18:47.140 に答える
1

Visual Studio 2008 を使用している場合は、Web 参照の代わりにサービス リファレンスを使用します。これにより、ジェネレーターによってコードが上書きされることなく、機能をオーバーライドするために使用できる部分クラスが生成されます。

Visual Studio 2005 では、partialキーワードを Reference.cs のクラスに追加し、独自の部分クラスを含む別のファイルを保持することができます。

public partial class WebServiceReference
 { public WebServiceReference(ExampleConfigurationClass config) 
    { /* ... */
    }
 }

WebServiceReference svc = new WebServiceReference(myConfig);
于 2008-09-24T04:07:23.220 に答える
0

これを解決するには、クラスライブラリのWeb参照を動的にしてから、Web参照を含むapplicationSettings構成セクションをapp.configファイルからSharepointサイトweb.configにコピーします。

これは通常は存在しないため、applicationSettingsのエントリもweb.configにコピーする必要があることに注意してください。

于 2008-09-26T13:13:50.587 に答える
-1

これを試すことができます。動的Web参照を使用するのではなく、静的参照にして、Reference.csのコードがURLの.configファイルで値を検索しないようにします。次に、生成されたWebサービスクライアントコードをサブクラス化し、その派生クラスに独自のロジックを追加して.Urlプロパティを設定します。その後、VS.NETはReference.csを好きなように再生成でき、URL設定コードはそのまま残ります。もちろん、派生クラスを使用するには、ダウンストリームコードを更新する必要がありますが、それは単純なグローバル置換である必要があります。

于 2008-09-24T04:24:21.090 に答える