У меня есть существующий веб-сервис (ASMX), который также должен отображаться как WCF. ASMX должен оставаться и желательно без изменений на клиенте. Согласно this, я сконфигурировал следующее. Уровень сервиса генерируется с помощью CodeSmith, и пока я не писал эти службы, я знаю, что они прекрасны, поскольку они использовались в дикой природе в течение многих лет. Имена были изменены, чтобы защитить невинных. Улыбка.Сервис как ASMX и WCF
В слое службы есть XXX.YYY.MyService
класс, порожденный CodeSmith который дважды украшен
[ServiceContract(Namespace = "http://XXX.YYY")]
и
[WebService(Namespace = "http://XXX.YYY", Name = "MyService")]
Я также создал пустой интерфейс XXX.YYY.IMyService
, который реализуется с помощью MyService
. На этом этапе я могу использовать сервис ASMX без проблем.
Теперь я добавить SVC-файл в сервисный слой, который содержит ...
<%@ ServiceHost Language="C#" Debug="true" Service="XXX.YYY.MyService" %>
... и настроить web.config служебный слой с ...
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="XXX.YYY.MyService">
<endpoint binding="basicHttpBinding" contract="XXX.YYY.IMyService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
Если я построю, а затем попытаюсь сделать ссылку службы в Visual Studio 2010 на службу, я вижу версии .ASMX и .SVC MyService
. Расширение ветки .svc в диалоговом окне «Добавить службу» приводит к ошибке, связанной с пустым XML-документом.
Если я исследую журнал событий я получаю ...
WebHost не удалось обработать запрос. Информация о отправителе: System.ServiceModel.ServiceHostingEnvironment + HostingManager/39449526 Исключение: System.ServiceModel.ServiceActivationException: служба/система/MysService.svc не может быть активирована из-за исключения во время компиляции. Сообщение исключения: Имя контракта «XXX.YYY.IMyService» не может быть найдено в списке контрактов, реализуемых с помощью службы «MYSERVICE» .. --->
... но MyService
отмечено в реализации IMyService
...
public partial class MyService : IMyService
Я также попытался изменить атрибут контракта на службу к MyService
вместо интерфейса. Это работает, но для разрыва клиентского кода, поскольку любая попытка создать экземпляр службы завершается с ошибкой, так как теперь это интерфейс.
Надеюсь, это имеет смысл. Пожалуйста, не стесняйтесь спрашивать что-нибудь дополнительное. Я старался быть как можно более подробным.
(Не связано с IIS .. это чисто в Visual Studio 2010).
Спасибо.