3

大きなシェアポイント プロジェクトに統合する小さなシェアポイント プロジェクトがあります。私のプロジェクトでは 2 つの Web サービスを使用しています。Web Referenceの(サービスリファレンスに埋め込まれている)ダイアログを使用して追加しましたVS2010。テスト用と本番用の 2 セットの Web サービスがあります。アプリをローカルに展開すると、Web サービスの設定がローカル コンピューター上の web.config ファイルに書き込まれますC:\inetpub\wwwroot\wss\VirtualDirectories\80\。セクションは次のようになります -

 <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 サービスと本番 Web サービスの違いは、IP アドレスだけです。IP アドレスを運用環境に変更すると、アプリは新しい値を使用しません。VS に戻りWeb Reference URLPropertiesダイアログ内を正しい運用 URL に更新してから、パッケージを再度デプロイする必要がありました。テストから実稼働の Web サービス URL に常に切り替え続けるので、これは面倒です。app.config で IP アドレスを変更し、ブラウザでページを更新して、新しい URL を取得できるようにしたいと考えています。

私は何か間違ったことをしていますか?これを行う別の方法はありますか?

4

2 に答える 2

1

コードで Web サービスの URL を変更すれば、ビルド プロセスを繰り返す必要はないと思います。このように変更できます

WebServiceObjectName webService = new WebServiceObjectName (); 
webService.Uri = [IPaddress or DNS name]
于 2012-04-18T17:27:14.703 に答える
0

私たちはこのようにこれを行います:

<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サービスへのクライアント参照を取得するには:

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

これは次のように呼ばれます:

var sv = PublicWSClient.Client();

これにより、説明する手動の手順が不要になり、テストとライブの両方を1つの構成ファイルにキャプチャしてチェックインできるようになります。

于 2012-07-16T21:47:07.040 に答える