Если у меня есть мои службы WCF в IIS7 или WPAS, можно ли загрузить две или более службы в один и тот же AppDomain, чтобы они могли совместно использовать статические переменные?IIS7/WPAS: несколько служб WCF в одном домене AppDomain?
ответ
Удостоверьтесь, что вы можете предоставить столько конечных точек в пределах веб-приложений, сколько хотите (даже для разных служб WCF). Это не должно ограничиваться ни IIS, ни WPAS.
Это позволит вам получить доступ к любым общим данным. Хотя я бы обычно советовал не использовать статические переменные для обмена информацией (но, конечно, я не знаю ваших требований).
Несомненно. В Visual Studio просто добавьте еще один элемент службы WCF. IIS будет запускать обе службы в том же AppDomain. В этом примере я создал первую библиотеку только следующие определения интерфейса:
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>
Да, вы можете сделать это как в IIS и WPAS. Но единственный способ сделать это - собрать обе службы в одной сборке AFAIK.