0

WCF ServicereferenceをWebアプリケーションに追加しました。次のエントリが、web.configに作成されました。

<system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_INameVerification" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
      textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
        enabled="false" />
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="https://int. NameVerification.com/Default/NameVerificationService.svc"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_INameVerification"
    contract="NameVerificationService.INameVerification"
    name="WSHttpBinding_INameVerification" />
</client>

現在、アプリケーションをAzureクラウドプラットフォームにホストすることを計画しています。アプリをクラウドでホストしたら、いつでもエンドポイントを変更できるようにしたいと考えています。

<endpoint address=”https://int. NameVerification.com/Default/NameVerificationService.svc” 
   binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_INameVerification"
    contract="NameVerificationService.INameVerification"
    name="WSHttpBinding_INameVerification" />

SericeConfigからWCFサービスにこの呼び出しを追加するにはどうすればよいですか?アプリケーションがweb.configからではなくService configからWCFエンドポイントアドレスを読み取るように、ServiceConfigの実際のエントリは何ですか?

4

3 に答える 3

2

よろしくお願いします。

私はこの問題の解決策を見つけました。

  1. プログラムでバインディングとserviceaddressを関連付け、Serviceconfigに設定を追加しました
  2. ServiceConfigエントリが追加されました
<Setting name="myServiceAddressUrl"
    value="https://int.
    NameVerification.com/Default/NameVerificationService.svc" />
    WSHttpBinding binding = new WSHttpBinding();
    binding.Name = "WSHttpBinding_INameServiceVerification";
    binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
    binding.ReliableSession.Enabled = false;
    binding.TransactionFlow = false;
    binding.Security.Mode = SecurityMode.Transport;
    binding.Security.Message.ClientCredentialType = 
        MessageCredentialType.Windows;

    string myServiceAddressUrl = 
        RoleEnvironmentWrapper.GetConfigurationSettingValue(
           "AdderssServiceURL.svc");
    EndpointAddress myService = new EndpointAddress(myServiceAddressUrl);

    NameVerificationClient verificationClient = 
        new NameVerificationClient(binding, myService );
于 2012-01-13T18:15:03.937 に答える
0

コンソールユーティリティでスタートアップタスクを使用してRoleEnvironmentから構成を読み取り、手動で(またはServiceManagerを使用して)web.configを更新することを検討してください。もう1つのオプションは、サービスファクトリを使用し、明示的なサービスを作成する前にロール構成を読み取ることです。

おそらく、WebRole OnStartメソッドを使用して実行することもできますが、この時点でweb.configを変更しても安全かどうかはわかりません。

于 2011-12-26T10:35:02.367 に答える
0

私が正しく理解していれば、Azureで実行されているサービスを消費するアプリケーションを再デプロイせずに、消費するサービスのエンドポイントを変更することだけを考えていますか?このサービスはソリューションの外部にあるように見えるため、実際のサービスのエンドポイントを変更することを検討していませんか?

その場合は、アプリケーションをweb.configファイルで指定されたエンドポイント構成に依存せず、代わりにServiceConfigファイル(必要と思われる名前と値のペア)でエンドポイント設定をインストルメント化することをお勧めします。サードパーティのエンドポイントを呼び出すプロキシを構築するときに、それらを手動で解析します。このようにして、web.configから取得するもの(おそらくバインディング構成は引き続きweb.configによって駆動できます)とServiceConfigから取得するもの(エンドポイントUrLなど)を完全に制御できます。アプリケーションを再デプロイしたり停止したりせずに、後でServiceConfigでエンドポイントを切り替えることができます。

ServiceConfigから読み取るには、Azure(リアルまたはエミュレーター)で実行している場合は、RoleEnvironmentを確認する必要があります。

HTH

于 2011-12-26T19:14:10.163 に答える