作为ASMX和WCF服务

时间:2011-03-17 09:47:34

标签: wcf asmx

我有一个现有的Web服务(ASMX),它也需要作为WCF公开。 ASMX必须保留,最好不要对客户进行任何更改。根据{{​​3}},我配置如下。使用CodeSmith生成服务层,虽然我没有写这些服务,但我知道它们很好,因为它们已经在野外使用了很多年。这些名字已经改变,以保护无辜的......咧嘴笑。

在服务层中,CodeSmith生成了一个XXX.YYY.MyService类,用

双重装饰
[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'。异常消息是:在服务'MyService'实现的合同列表中找不到合同名称'XXX.YYY.IMyService'.. ---&gt;

...但MyService被标记为实施IMyService ...

public partial class MyService : IMyService

我还尝试将服务的合约属性更改为MyService而不是接口。这对于客户端代码中断是有效的,因为任何创建服务实例的尝试都会失败,因为它现在是一个接口。

我希望这是有道理的。请随意提出任何额外的问题。我试图尽可能详细。

(没有涉及IIS ..这纯粹是在Visual Studio 2010中。)

感谢。

2 个答案:

答案 0 :(得分:0)

您的代码实现了IMyService,您确定它是XXX.YYY.IMyService。

答案 1 :(得分:0)

我的答案是将[ServiceContract]和[OperationContract]声明移动到界面。这为我解决了这个问题。

HTH。