Служба ASMX и WCF - PullRequest
       5

Служба ASMX и WCF

0 голосов
/ 17 марта 2011

У меня есть существующий веб-сервис (ASMX), который также должен быть представлен как WCF. ASMX должен остаться и желательно без изменений на клиенте. Согласно это я настроил следующим образом. Сервисный уровень генерируется с помощью CodeSmith, и хотя я не писал эти сервисы, я знаю, что они в порядке, так как они использовались в дикой природе в течение многих лет. Имена были изменены, чтобы защитить невинных .. улыбка.

В слое обслуживания есть класс 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 на службу, я вижу версии MyService .ASMX и .SVC. Развертывание ветки .svc в диалоговом окне Добавить ссылку на службу приводит к ошибке, ссылающейся на пустой документ XML.

Если я изучу журнал событий, я получу ...

WebHost не смог обработать запрос. Информация об отправителе: System.ServiceModel.ServiceHostingEnvironment + HostingManager / 39449526 Исключение: System.ServiceModel.ServiceActivationException: служба '/System/MyService.svc' не может быть активирована из-за исключения во время компиляции. Сообщение об исключении: Имя контракта «XXX.YYY.IMyService» не найдено в списке контрактов, реализованных сервисом «MyService» .. --->

... но MyService помечен как реализующий IMyService ...

public partial class MyService : IMyService

Я также попытался изменить атрибут контракта для службы на MyService вместо интерфейса. Это работает, но для клиентского кода происходит сбой, так как любая попытка создать экземпляр службы терпит неудачу, так как теперь это интерфейс.

Надеюсь, это имеет смысл. Пожалуйста, не стесняйтесь спрашивать что-нибудь дополнительное. Я старался быть максимально подробным.

(IIS не задействован. Это чисто в Visual Studio 2010).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Ответом для меня было перенести объявления [ServiceContract] и [OperationContract] в интерфейс.Это исправило проблему для меня.

HTH.

0 голосов
/ 17 марта 2011

Ваш код реализует IMyService, если вы уверены, что это XXX.YYY.IMyService.

...