2011-03-17 7 views
0

У меня есть существующий веб-сервис (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).

Спасибо.

ответ

0

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

HTH.

0

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

Смежные вопросы