3

私は、より大きなsharepointプロジェクトに統合された小さなsharepointプロジェクトを持っています。私のプロジェクトは2つのWebサービスを使用しています。私はWeb Reference(サービスリファレンスに埋め込まれています)ダイアログをVS2010に追加しました。テスト用とプロダクション用の2つのWebサービスが用意されています。アプリケーションをローカルにデプロイすると、Webサービス設定はローカルマシンのC:\inetpub\wwwroot\wss\VirtualDirectories\80\にあるweb.configファイルに書き込まれます。このセクションは次のようになります。WebサービスのURLをApp.Configに変更する

<applicationSettings> 
    <XXX.YYY.Properties.Settings> 
     <setting name="XXX_YYY_ZZZ_WS1" serializeAs="String"> 
     <value>http://<TEST_IPAddress>/WebService/WS1.asmx</value> 
     </setting> 
     <setting name="XXX_YYY_ZZZ_WS2" serializeAs="String"> 
     <value>http://<TEST_IPAddress>/WebService/WS2.asmx</value> 
     </setting> 
    </XXX.YYY.Properties.Settings> 
    </applicationSettings> 

テストとプロダクションWebサービスの違いは、IPアドレスだけです。 IPアドレスをプロダクションに変更すると、アプリは新しい値を使用していません。 VSに戻ってPropertiesダイアログのWeb Reference URLを正しいプロダクションURLに更新してから、パッケージを再デプロイする必要がありました。これは、テストからプロダクションWebサービスURLへの切り替えを常に続けていくと面倒です。私はapp.configのIPアドレスを変更することができるようにしたい、ブラウザのページを更新し、それは新しいURLを拾う必要があります。

何か間違っていますか?これを行う別の方法がありますか?

答えて

1

私はあなたがコードでwebserviceのURLを変更すると、ビルドプロセスを繰り返す必要はないと思います。あなたは私たちがそうのようにこれを行うこの

WebServiceObjectName webService = new WebServiceObjectName(); 
webService.Uri = [IPaddress or DNS name] 
+0

私はあなたを混乱させるかもしれません。私が投稿したスニペットコードは、2つのTEST WebサービスのURLです。テスト用でも、プロダクション用でもない。どちらもTESTです。私はプロダクションのIPに変更することができますし、アプリケーションは自動的にそれを拾う必要があります。 – tempid

+0

次に、テスト用に2つ、実動用に2つ、導入タイプを指すために1つのキーがあります。つまり、Liveのテスト – Adil

+0

あなたのアプローチは理解していますが、実装方法はわかりません。プロダクション用の ''セクションにさらに2つのエントリーがありますか?あなたは詳細を教えていただけますか?ありがとう! – tempid

0

のように変更することができます。

public static PublicWSClient Client() 
{ 
#if PRODUCTION 
    return new PublicWSClient("SvLive"); 
#else 
    return new PublicWSClient("SvTest"); 
#endif 
} 

のように呼ばれている。そして、

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IPublicWS" 
       openTimeout="00:00:05" 
       sendTimeout="00:03:00" 
       receiveTimeout="00:10:00" 
       closeTimeout="00:00:30" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="262144" maxBufferPoolSize="524288" maxReceivedMessageSize="262144" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="131072" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="None"> 
       <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
       <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <!-- Production --> 
     <endpoint name="SvLive" address="http://sv.com/PublicWS/PublicWS.svc/PublicWS" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPublicWS" contract="SV.IPublicWS" /> 

     <!-- Test --> 
     <endpoint name="SvTest" address="http://staging.sv.com/PublicWS/PublicWS.svc/PublicWS" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPublicWS" contract="SV.IPublicWS" /> 
    </client> 
</system.serviceModel> 

、このWebサービスへのクライアントの参照を取得するには:

var sv = PublicWSClient.Client(); 

これはあなたが記述する手作業のステップを防ぎ、チェックインの準備ができた単一の設定ファイルにテストとライブの両方をキャプチャできるようにします。

関連する問題