我有一个现有的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中。)
感谢。
答案 0 :(得分:0)
您的代码实现了IMyService,您确定它是XXX.YYY.IMyService。
答案 1 :(得分:0)
我的答案是将[ServiceContract]和[OperationContract]声明移动到界面。这为我解决了这个问题。
HTH。