IIS7 / WPAS: несколько служб WCF в одном домене приложений? - PullRequest
4 голосов
/ 02 декабря 2008

Если мои службы WCF размещены в IIS7 или WPAS, возможно ли загрузить две или более служб в один и тот же домен приложений, чтобы они могли совместно использовать статические переменные?

Ответы [ 3 ]

5 голосов
/ 24 апреля 2010

Конечно, вы можете предоставить столько конечных точек в веб-приложении , сколько вам нужно (даже для разных служб WCF). Это не должно ограничиваться ни IIS, ни WPAS.

Это позволит вам получить доступ к любому виду общих данных . Хотя я обычно не советую использовать статические переменные для обмена информацией (но, конечно, я не знаю ваших требований).

2 голосов
/ 25 апреля 2010

Конечно. В Visual Studio просто добавьте еще один элемент службы WCF. IIS будет запускать обе службы в одном домене приложений. В этом примере я сначала создал библиотеку только со следующим определением интерфейса:

namespace ServiceInterface
{
    [ServiceContract]
    public interface IClass
    {
        [OperationContract]
        string GetMessage();
    }
}

Затем я создал веб-приложение в VS и добавил две службы: MyService и Service2, которые обе поддерживают IClass. Это мой раздел файла web.config для serviceModel

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WebService1.MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="WebService1.Service2Behavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="WebService1.MyServiceBehavior"
       name="WebService1.MyService">
        <endpoint address="" binding="wsHttpBinding" contract="ServiceInterface.IClass">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
      <service behaviorConfiguration="WebService1.Service2Behavior"
       name="WebService1.Service2">
        <endpoint address="" binding="wsHttpBinding" contract="ServiceInterface.IClass">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

В клиентском приложении информация о вашей конфигурации может выглядеть следующим образом:

<client>
    <endpoint address="http://mymachinename.local/MyService.svc"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IClass"
        contract="ServiceReference1.IClass" name="WSHttpBinding_IClass">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>
    <endpoint address="http://mymachinename.local/Service2.svc"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IClass1"
        contract="ServiceReference2.IClass" name="WSHttpBinding_IClass1">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>
</client>
0 голосов
/ 25 апреля 2010

Да, вы можете сделать это как в IIS, так и в WPAS. Но единственный способ сделать это - компилировать обе службы в одну сборку, AFAIK.

...